首先,优先级在这里不是问题,因为foo = bar || (*zap)
效果并不好。一般的经验法则是您不能对 splat 执行其他操作。即使是简单的事情foo = (*zap)
也是无效的。这也适用于 1.9。
话虽如此,您希望foo = bar || *zap
做什么,如果它有效,那不同于foo = bar || zap
?即使在像a, b = bar || *zap
(这也不起作用)这样的情况下,也能a, b = bar || zap
完成我认为是同一件事的事情。
这可能有意义的唯一情况是a, b = foo, bar || *zap
. 您应该会发现,您希望使用它的大多数情况都包含在a, b = foo, *(bar || zap)
. 如果这不包括你的情况,你可能应该问问自己,你真正希望通过编写这样一个丑陋的结构来完成什么。
编辑:
响应您的评论,*zap || bar
相当于*(zap || bar)
. 这表明 splat 的优先级有多低。它到底有多低?我能给你的最好答案是“相当低”。
但是,对于一个有趣的示例,请考虑一个foo
采用三个参数的方法:
def foo(a, b, c)
#important stuff happens here!
end
foo(*bar = [1, 2, 3])
将在赋值后 splat 并将参数分别设置为 1、2 和 3。比较foo((*bar = [1, 2, 3]))
which 会抱怨参数数量错误(1 比 3)。