使用Proc.call与Proc.[]是否存在Ruby优先级问题?

使用Proc.call与Proc.[]是否存在Ruby优先级问题?,ruby,operator-precedence,proc-object,Ruby,Operator Precedence,Proc Object,最近我和一位朋友讨论了Ruby的Proc。您可以通过以下几种方式之一调用Proc。一种方法是调用: 另一种是使用大括号: 这里是否存在任何潜在的优先问题,或者这两种说法是否完全可以互换?如果没有,您能否提供一个提供不同结果的上下文示例?调用技术允许操作员优先考虑潜在的模糊意图: p = Proc::new do |a1| Proc::new do |a2| "#{a1.inspect}:#{a2.inspect}" end end p.call([1,2,3]).call [1] => =

最近我和一位朋友讨论了Ruby的
Proc
。您可以通过以下几种方式之一调用
Proc
。一种方法是调用:

另一种是使用大括号:

这里是否存在任何潜在的优先问题,或者这两种说法是否完全可以互换?如果没有,您能否提供一个提供不同结果的上下文示例?

调用
技术允许操作员优先考虑潜在的模糊意图:

p = Proc::new do |a1| Proc::new do |a2| "#{a1.inspect}:#{a2.inspect}" end end
p.call([1,2,3]).call [1]
=> => "[1, 2, 3]:[1]"
p.call [1,2,3][1]
=> #<Proc:0x7ffa08dc@(irb):1>
p.call([1,2,3])[1]
=> "[1, 2, 3]:1"
p[[1,2,3]][[1]]
=> "[1, 2, 3]:[1]"
p=Proc::new do | a1 | Proc::new do | a2 |“#{a1.inspect}:#{a2.inspect}”结束
p、 呼叫([1,2,3])。呼叫[1]
=> => "[1, 2, 3]:[1]"
p、 电话[1,2,3][1]
=> #
p、 电话([1,2,3])[1]
=> "[1, 2, 3]:1"
p[[1,2,3][[1]]
=> "[1, 2, 3]:[1]"

[]
语法使参数与方法之间的语法关联更加健壮,但是通过在
Proc#call

Hmm的参数周围加上括号,可以达到同样的效果。。。那不是我想要的。这显示了
.call(x)之间的差异。call
.call x.call
,而不是
。call
[]
@John Feminella,请尝试
p[“John”][“Barry”]
查看差异。也许艾登会想在他的回答中添加这一点。@Wayne Conrad-谢谢-我在这个基础上加入了一个新的例子。这个例子更清楚,而且确实显示了不同之处。谢谢,艾登和韦恩!
p ["Bob"]
=> "hello, Bob"
p = Proc::new do |a1| Proc::new do |a2| "#{a1.inspect}:#{a2.inspect}" end end
p.call([1,2,3]).call [1]
=> => "[1, 2, 3]:[1]"
p.call [1,2,3][1]
=> #<Proc:0x7ffa08dc@(irb):1>
p.call([1,2,3])[1]
=> "[1, 2, 3]:1"
p[[1,2,3]][[1]]
=> "[1, 2, 3]:[1]"