Ruby: разделение нескольких возвратов - PullRequest
0 голосов
/ 15 сентября 2018

В моем примере ниже, 2 и 3 возвращаются в виде массива.Есть ли ярлык для разделения значений в массиве для присвоения различным переменным без необходимости вручную что-то вроде two = answers[0]?

def returnThreeValues
  return 1, returnTwoValues
end

def returnTwoValues
  return 2, 3
end

def shortcut
  one, two, three = returnThreeValues

  puts "one: " + one.to_s
  puts "two: " + two.to_s
  puts "three: " + three.to_s
end

shortcut()

Выходы:

ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-linux]

one: 1
two: [2, 3]
three: 

Ответы [ 2 ]

0 голосов
/ 15 сентября 2018

Что говорит @matthew. Или это:

def returnThreeValues
  return 1, *returnTwoValues
end
0 голосов
/ 15 сентября 2018

Проблема здесь в том, что ваш метод returnThreeValues возвращает массив со значением и внутренним массивом:

[1, [2, 3]]

, и вы пытаетесь назначить три переменные.Для исправления вашего кода это должно быть:

one, two, three = returnThreeValues.flatten

или вы можете изменить сам метод

def returnThreeValues
  [1, returnTwoValues].flatten
end

, который изменит возвращаемое значение returnThreeValues и теперь будет [1, 2, 3]

Стоит отметить, что вам не нужно явно указывать return в своих методах.

...