Я хотел бы определить метод []
в классе моего собственного создания, чтобы взять блок. Я сделал это следующим образом.
class A
def self.[](*args, &block)
puts "I am calling #{block} on #{args}."
block.(*args)
end
end
Я могу вызвать это следующим образом.
# Explicit method invocation
A.[](1) { |x| puts x }
# With a procedure argument
arg = proc { |x| puts x }
A[2, &arg]
Однако, что я хотел бы быть в состоянии сделать это.
A[3] { |x| puts x }
Что, к сожалению, похоже, вызывает синтаксическую ошибку. Есть ли синтаксис блока для метода скобок, или я застрял с первыми двумя способами его вызова? На самом деле, в более общем смысле, какие имена методов Ruby будут разрешать блоки в их вызове, поскольку кажется, что может быть ограничение на то, когда это разрешено?
A.send('[]', 3) { |x| puts x }
- это альтернатива, но не такая красивая. - person mrlew   schedule 22.01.2017