هل هناك مشكلات أسبقية روبي مع استخدام Proc.Call مقابل Proc. []؟
-
22-09-2019 - |
سؤال
في الآونة الأخيرة ، كنت أجري مناقشة مع صديق حول روبي 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