如何使用ruby splat运算符?我们能对它做一些操作吗?

时间:2015-05-13 00:54:40

标签: ruby

令人困惑的案例:

arr = [:one, :two]
attr_accessor *arr + [:three]

在这种情况下,似乎我们对splat +执行*arr操作。但是,通常我们不能对splat执行任何操作。所以这让我很困惑。

我更喜欢这样的另一个案例:

arr = [:one, :two]
attr_accessor *(arr << :three)

那么,你有什么看法?

1 个答案:

答案 0 :(得分:2)

不,你的优先权是错的。 *arr + [:three]*(arr + [:three]),因此它将三个参数展开到attr_accessor。 splat的结果不是Ruby值,因此无法对其执行任何操作。在+是运算符的同一意义上,它不是运算符。虽然+是一种方法,但*的这种用法不是。

(这里没有任何意见,只有关于Ruby如何运作的事实。)