Ответ 1
Вызывает блок, устанавливая параметры блоков для значений в параметрах, используя что-то близкое к семантике вызова метода. Генерирует предупреждение, если нескольким значениям передается proc, который ожидает только один (ранее это молча преобразовывало параметры в массив). Обратите внимание, что prc.() вызывает prc.call() с указанными параметрами. Его синтаксический сахар, чтобы скрыть "вызов".
Я провел некоторое исследование, и найденный метод #()
является синтаксическим suger метода #call
. Посмотрите на ошибку, как показано ниже:
module Foo
def self.bar
12
end
end
Foo.()
#undefined method `call' for Foo:Module (NoMethodError)
Поскольку OP определил метод #call
в классе Foo
, Foo#call
вызывается в попытке Foo.()
.
Вот еще несколько примеров:
"ab".method(:size).() # => 2
"ab".method(:size).call # => 2
"ab".() # undefined method `call' for "ab":String (NoMethodError)
См. здесь, что сказал Мац Итак, компромисс с синтаксисом object.(), введенным в версии 1.9...