PROC対Proc.callを使用してRubyの優先順位の問題はありますか。[]?
-
22-09-2019 - |
質問
最近、私はRubyのProc
について友人と話し合いを持ちました。あなたは、いくつかの方法のいずれかでProc
を呼び出すことができます。一つの方法がinvoke の Proc.call
ののことです。
p = Proc.new { |x| "hello, #{x}" }
p.call "Bob"
=> "hello, Bob"
もう一つは、の Proc.[]
の<中括弧を使用することです/>
p ["Bob"]
=> "hello, Bob"
ここで任意の潜在的な優先順位の問題はあります、またはこれらの2つのステートメントは完全に互換性がありますか?ない場合は、異なる結果が提供されるコンテキストの例を提供することができますか?
解決
#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