هل هناك مشكلات أسبقية روبي مع استخدام Proc.Call مقابل Proc. []؟

StackOverflow https://stackoverflow.com/questions/2318162

سؤال

في الآونة الأخيرة ، كنت أجري مناقشة مع صديق حول روبي 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.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top