Ruby:分离多个返回
在下面的示例中,2和3作为数组返回。是否有一种快捷方式可以拆分数组中的值以分配给不同的变量,而无需手动执行类似于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
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操作符”。