Je voudrais définir la méthode []
sur une classe de ma propre création pour prendre un bloc. Je l'ai fait comme suit.Méthode Ruby Bracket avec le bloc
class A
def self.[](*args, &block)
puts "I am calling #{block} on #{args}."
block.(*args)
end
end
Je peux invoquer ceci comme suit.
# Explicit method invocation
A.[](1) { |x| puts x }
# With a procedure argument
arg = proc { |x| puts x }
A[2, &arg]
Cependant, ce que je voudrais pouvoir faire est ceci.
A[3] { |x| puts x }
Ce qui semble malheureusement produire une erreur de syntaxe. Existe-t-il une syntaxe de bloc pour la méthode bracket, ou suis-je bloqué avec les deux premières manières de l'invoquer? En fait, plus généralement, quels noms de méthodes Ruby autoriseront les blocs dans leur invocation, car il semblerait qu'il y ait une limitation sur quand cela est autorisé?
Je ne pense pas qu'il y ait un moyen. 'A.send ('[]', 3) {| x | met x} 'est une alternative, mais pas si chic. – mrlew