如何在Ruby中从方法返回splat

如何在Ruby中从方法返回splat,ruby,Ruby,我想为数组创建一个方法,以获取数组的splat作为回报。这可以在Ruby中实现吗 例如,以下是我当前的代码: Array.module_eval do def to_args return *self end end 我希望[1,2,3].to_args返回1,2,3,但它最终返回[1,2,3]您无法从Ruby返回“splat”。但您可以返回一个数组,然后自己对其进行splat: def args [1, 2, 3] end x, y, z = args # x == 1

我想为数组创建一个方法,以获取数组的splat作为回报。这可以在Ruby中实现吗

例如,以下是我当前的代码:

Array.module_eval do
  def to_args
    return *self
  end
end
我希望
[1,2,3].to_args
返回
1,2,3
,但它最终返回
[1,2,3]
您无法从Ruby返回“splat”。但您可以返回一个数组,然后自己对其进行splat:

def args
  [1, 2, 3]
end
x, y, z = args 
# x == 1
# y == 2
# z == 3

x, *y = args
# x == 1
# y == [2, 3]
当然,这适用于任何数组,因此实际上没有必要将
to_args
方法修补到
数组中
——这完全是关于调用关注点如何使用splat操作符的问题:

arr = [1, 2, 3]
x, y, z = arr
x, *y = arr
*x, y = arr
相同的机制适用于块参数:

arr = [1, 2, 3]
arr.tap {|x, *y| y == [2, 3]} 
更高级的用法:

arr = [1, [2, 3]]
x, (y, z) = arr

不完全是。看起来您试图做的(问题没有给出使用示例)是强制多个返回值。但是,返回飞溅的数组
self
可能正是您所需要的,只要您在等式的调用端正确处理多个返回值

考虑以下例子:

first, *rest = [1, 2, 3]        # first = 1, rest = [2, 3]
*rest, last = [1, 2, 3]         # rest = [1, 2], last = 3
first, *rest, last = [1, 2, 3]  # first = 1, rest = [2], last = 3

除此之外,我实际上看不到任何像您建议的那样捕获或传递多个值的方法。如果我理解正确的话,我认为你的问题的答案完全取决于调用方的用法。

对我来说,澄清这一点的概念是,尽管可以在Ruby中模拟多个值的返回,但一个方法实际上只能返回一个对象,因此模拟将多个值捆绑在一个数组中

返回数组,然后可以像解构任何数组一样解构它

def foo
  [1, 2]
end

one, two = foo

如果您解释了如何使用此方法,您的问题可能会更清楚。
1,2,3
在ruby中不是有效值,因此不清楚您真正想要什么。字符串?所有Ruby方法都返回一个对象。