是否有红宝石的优先问题,使用Proc.call与PROC。[]?
-
22-09-2019 - |
题
最近我有一个关于Ruby的Proc
朋友的讨论。您可以通过以下几种方式中的一种叫Proc
。一种方法是调用的 Proc.call
强> :在
p = Proc.new { |x| "hello, #{x}" }
p.call "Bob"
=> "hello, Bob"
另一种是用大括号,的 Proc.[]
强> 一个>:
p ["Bob"]
=> "hello, Bob"
是否有任何潜在的问题优先这里,或者是这两种说法完全互换?如果没有,则可以提供其中不同的结果将提供一个上下文的一个例子
解决方案
在#call
技术允许操作优先于潜在晦涩意图:
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]"
在[]
语法使得的参数传递给方法的语法协会更强劲,但你通过把括号围绕参数Proc#call
达到同样的效果。
不隶属于 StackOverflow