So che posso definire dinamicamente i metodi su una classe usando define_method
e che specifichi i parametri che questo metodo impiega usando l'arità del blocco.Posso definire dinamicamente un metodo Ruby che accetta un blocco?
Voglio definire dinamicamente un metodo che accetta sia parametri opzionali che un blocco. In Ruby 1.9, questo è facile perché ora è consentito passare un blocco a un blocco.
Purtroppo, Ruby 1.8 non consente questo, quindi il seguente non funziona:
#Ruby 1.8
class X
define_method :foo do |bar, &baz|
puts bar
baz.call if block_given?
end
end
x = X.new
x.foo("foo") { puts "called!"} #=> LocalJumpError: no block given
Sostituzione della esplicita block.call
con yield
non risolve il problema.
L'aggiornamento a Ruby 1.9 non è purtroppo un'opzione per me. È un problema intrattabile o esiste un modo per aggirarlo?
Ho bisogno di passare una stringa a class_eval? Non posso passare un blocco, che manterrebbe l'ambito? – andrewdotnich
@andrewdotnich Bene, allora sei tornato al problema di come definirai il metodo in modo dinamico. –
https://github.com/agrimm/zombie-chaser/blob/master/lib/zombie-chaser/chaser.rb ha un esempio e un collegamento a un post del blog a metà del file. –