Я хотел бы определить метод []
для класса моего собственного создания, чтобы взять блок. Я сделал это следующим образом.Ruby Bracket Method with Block
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} 'является альтернативой, но не настолько фантазией. – mrlew