Переменная присваивание - PullRequest
4 голосов
/ 27 июня 2010

переменные a, b, c и d должны быть установлены в 'foo'.

Есть ли способ сделать это за одно задание? Как:

a, b, c, d = 'foo'

Ответы [ 4 ]

14 голосов
/ 27 июня 2010

Ссылка this

Лучший способ сделать это следующим образом, так как вам нужно общее значение для всех ваших переменных

a= b= c = d = 'foo'

для различных значений, которые вы можете сделать

a, b, c, d = 'foo1', 'foo2', 'foo3', 'foo4'
3 голосов
/ 27 июня 2010

Я считаю, что Ruby поддерживает нормальный тип цепочечного присваивания, например:

a = b = c = d = 'foo'
0 голосов
/ 15 июня 2013

Это наиболее безопасный способ:

a, b, c, d = 4.times.map{'foo'}

Этот метод похож и немного короче:

a, b, c, d = (1..4).map{'foo'}

Может быть длиннее, чем использование умножителя массива или цепочкиназначение, но таким образом вы на самом деле получите разные объекты, а не разные ссылки на один и тот же объект.

Код подтверждения:

[a,b,c,d].map(&:object_id)

Если object_id s одинаковы,ваши переменные ссылаются на один и тот же объект, и методы мутатора (например, sub!) будут влиять на то, что видят все 4 переменные.Если они разные, вы можете изменить один из них, не влияя на другие.

0 голосов
/ 28 июня 2010
a = b = c = d = 'foo'

, безусловно, правильный способ сделать это ... Если вы хотите немного причудливый способ:

a,b,c,d = %w{foo}*4

(% w {foo} возвращает массив строк, содержащий foo , * 4 , умножает этот массив, поэтому вы получаете массив, содержащий 4-кратную строку foo и вы можете назначить массив нескольким именам переменных, разделенных запятыми)

...