Существуют ли проблемы с приоритетом Ruby при использовании Proc.call по сравнениюПроц.[]?

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

Вопрос

Недавно у меня был разговор со своим другом о 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top