2012/6/7 Marco M. [email protected]:
@Alessio
Cos il blocco contiene una parte della logica di controllo invece deve
avere solo il contenuto.
@Gabriele
Intendi qualcosa di analogo a quello che ha proposto Luigi?
si, intendevo “cosa ha l’approccio di luigi che non va bene?”
Le proc
agiscono in un proprio contesto, non saprei come utilizzarle in questo
caso.
si, ma nell’esempio che fai tu sta facendo la stessa cosa, cio il
cliente del metodo “tentativi” sta facendo il lavoro di specificare
quando il blocco deve terminare, e a quel punto tanto vale che lo
faccia con una proc invece che con una stringa.
Forse conviene che fai un esempio con quello che vuoi fare veramente
cos riusciamo ad esserti pi utili.
end
end
5.tentativi(“break if tentativo>2”){|t| puts “tentativo #{t}”}
qua lo stesso,
" eval cmd if cmd"
diventa
cmd.call if cmd
e usi throw/raise al posto di break.
se vuoi passargli lo scope visto all’interno di tentativi fai
cmd.call(binding) if cmd
ma non ha senso che chi chiama il metodo “tentativi” abbia accesso
allo scope all’interno del metodo, sarebbe l’antitesi della
programmazione strutturata.
ma io vorrei andare oltre ed agire nello scope del blocco. Se fosse
possibile in qualche modo poter manipolare la variabile block anzich
poterla solo richiamare. Non so se ora pi chiaro, grazie comunque a
tutti
puoi farlo con porcate varie tra cui: parse_tree, ripper e a occhio
con set_trace_func.
Ma una cosa terribile e io non penso che vuoi fare quello, e che
se ritorniamo al problema originale
riusciamo a fare una coda migliore.
–
twitter: @riffraff
blog (en, it): www.riffraff.info riffraff.blogsome.com
work: circleme.com