Есть ли возможность вернуть несколько значений из метода? Что-то вроде этого:
def someMethod()
return ["a", 10, SomeObject.new]
end
[a, b, c] = someMethod
def sumdiff(x, y)
return x+y, x-y
end
#=> nil
sumdiff(3, 4)
#=> [7, -1]
a = sumdiff(3,4)
#=> [7, -1]
a
#=> [7, -1]
a,b=sumdiff(3,4)
#=> [7, -1]
a
#=> 7
b
#=> -1
a,b,c=sumdiff(3,4)
#=> [7, -1]
a
#=> 7
b
#=> -1
c
#=> nil
>>
исчезнут.def foo_and_bar; ['foo', 'bar']; end
Ruby имеет ограниченную форму деструктурирующего связывания:
Он также имеет ограниченную форму структурирования привязки:
Вы можете комбинировать эти две формы следующим образом:
Есть еще несколько вещей, которые вы можете делать с деструктуризацией / структурированием связывания. Я не показал использование оператора splat (
*
) с правой стороны. Вложенность (скобками) не показывала. Я не показал, что вы можете использовать деструктурирующую привязку в списке параметров блока или метода.Вот только закуска:
источник
Хотя возврат нескольких значений часто бывает полезен, я обычно нахожу это указателем на требование нового объекта.
То есть я обычно нахожу, что эти возвращаемые значения тесно связаны друг с другом по значению / контексту и передаются как таковые. Поэтому в этих случаях я бы создал новый объект, чтобы связать их вместе. Я научился распознавать особый запах кода.
источник
chunk
не существовало бы. Впрочем, отличный принцип. Код действительно пахнет. Раскачать.Вы также можете добиться этого, возвращая массив, например
который кажется функционально эквивалентным
источник