Ruby:分离多个返回

Ruby:分离多个返回,ruby,return-value,Ruby,Return Value,在下面的示例中,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 pu

在下面的示例中,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: 

这里的问题是,您的
returnThreeValues
方法返回一个带有值的数组和一个内部数组,该数组是:

[1, [2, 3]]
您正在尝试分配三个变量。要修复代码,必须:

one, two, three = returnThreeValues.flatten
或者您可以更改方法本身

def returnThreeValues
  [1, returnTwoValues].flatten
end
这会将
returnThreeValues
的返回值更改为现在的
[1,2,3]


值得注意的是,您的方法中也不需要显式的
return

这里的问题是
returnThreeValues
方法返回一个带有值的数组和一个内部数组,即:

[1, [2, 3]]
您正在尝试分配三个变量。要修复代码,必须:

one, two, three = returnThreeValues.flatten
或者您可以更改方法本身

def returnThreeValues
  [1, returnTwoValues].flatten
end
这会将
returnThreeValues
的返回值更改为现在的
[1,2,3]


值得注意的是,在方法中也不需要显式的
返回。或者这个:

def returnThreeValues
  return 1, *returnTwoValues
end

马修说了什么。或者这个:

def returnThreeValues
  return 1, *returnTwoValues
end

成功了。谢谢大家!<代码>一,(二,三)=[1,[2,3]]
可以说读起来更好,也更通用,因为您可能想编写
一,(二,(三,四))=[1,[2,[3,4]]
一,(二,arr)=[1,[2,[3,4]]
,这两种方法都不能使用
展平
来完成。读者们,看,就是这样。谢谢大家!<代码>一,(二,三)=[1,[2,3]]
可以说读起来更好,也更通用,因为您可能想编写
一,(二,(三,四))=[1,[2,[3,4]]
一,(二,arr)=[1,[2,[3,4]]
,这两种方法都不能使用
展平
来完成。读者们,看。实际上我更喜欢这个:)同意。这只是一个展平的捷径,还是一个具有类似结果的不同函数?@buddingprogrammer:它被称为“splat操作符”。实际上我更喜欢这个:)同意。这只是一个展平的快捷方式,还是一个具有类似结果的不同函数?@buddingprogrammer:它被称为“splat操作符”。