Существуют ли проблемы с приоритетом Ruby при использовании Proc.call по сравнениюПроц.[]?
-
22-09-2019 - |
Вопрос
Недавно у меня был разговор со своим другом о Ruby's 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