Use
a,b,c = values
a #=> 1
b #=> 2
c #=> 3
For the updated portion:
Having d = [a,b,c] and thinking of assigning d = values and expecting a,b,c to change wouldn't work, because d = [a,b,c] is an assignment, d is set as [10,20,30].
Probably, something like this may help in understanding how you can achieve this:
a, b, c = [10, 20, 30]
values = [1,2,3]
d = -> (x) { a, b, c = x }
a #=> 10
b #=> 20
c #=> 30
d.call values
a #=> 1
b #=> 2
c #=> 3
d in above case is a lambda, they are named block which can be invoked later. They bind with the variables in current scope, so they can change them when invoked (by d.call)
a,b,c = values[a, b, c]is not an array of variables. They are actually some values that are referred to by the respective variables.a,b,c = [10,20,30]an "array of variables"?[10,20,30]is an array, but an array of numbers.a, b, c = ...on the other hand is an assignment. Could you elaborate, please?