Ruby 的 splat 运算符 *
可用于合并
def one_argument(*a)
...
end
one_argument(1, 2, 3)
或拆分
def multiple_arguments(a, b, c)
...
end
multiple_arguments(*[1, 2, 3])
多个值,取决于上下文。
是否可以创建一种方法来充当“逆splat”运算符?要充当逆运算,运算符必须满足:
inverse_splat(*(foo)) == foo
和
*(inverse_splat(foo)) == foo
最佳答案
关于
*(inverse_splat(foo))
,没有意义。 splatting 的结果通常是一系列对象,而不是对象。这种东西在 Ruby 中是不可能存在的。在这一点上,你似乎做出的假设,即
inverse_splat
和*
的顺序是可以互换的,结果证明是错误的。关于
inverse_splat(*(foo))
不可能有这样的逆。这是因为 splat
*
内部调用了to_a
,这不是一对一的映射。[[:a, 1], [:b, 2]].to_a # => [[:a, 1], [:b, 2]] {a: 1, b: 2}.to_a # => [[:a, 1], [:b, 2]]
只能在一对一映射上定义逆。
如果您忽略此类情况并仍想探索是否有接近它的东西,那么接近的东西就是
[
...]
文字。
关于ruby - 是否可以在 Ruby 中反转 splat?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34638074/