2013-06-25 13 views
6

Diciamo che ho una funzione chiamata bla definita da qualche parte nella mia app di rotaie.C'è un modo per visualizzare (o stampare) una definizione di metodo in modo programmatico nei binari?

C'è un modo in ruby ​​o binari attraverso il quale posso stampare il codice dinamicamente/programmaticamente utilizzato per definire tale funzione? Così, per esempio:

def bla 
    puts "Hi There" 
end 

e poi se io chiamo una funzione come, per esempio, get_definition:

puts get_definition(:bla) 

questo sarebbe stampare fuori

"puts \"Hi There\"" 

Esiste un modo canonico di fare Questo ? Non ho davvero avuto bisogno di farlo prima, e so che questa pratica non è molto comune nei binari.

Inoltre non voglio definire il mio metodo usando la programmazione meta (riflettente) e quindi memorizzo la stringa usata per definire il mio metodo. Qualsiasi aiuto è apprezzato!

+0

http://stackoverflow.com/a/11544229/1004274 – oldergod

+0

Duplicato di http://stackoverflow.com/questions/3220623/meta-programming-output-method-body-as-text –

+0

Buoni punti, sembra che sia un duplicato di entrambe le domande (strano, dal momento che quelle domande sono duplicate l'una dell'altra allora) ... nessuno di quelli in realtà risponde alla mia domanda e nessuno di loro può essere trovato su google durante la ricerca 'programmaticamente' o avrei trovato entrambi. Ma un duplicato è un duplicato –

risposta

1

Non ho idea di cosa stia scrivendo John Hyland. Non esiste un tale metodo (in Ruby semplice) come Method#source. La soluzione pratica è utilizzare pry gem. Ha metodi per consentire l'accesso alla fonte.

+1

Non so chi ti abbia votato, ma cercherò di usare anche la gemma della leva. @ John-Hyland ha in realtà un buon punto, il metodo .source_location funziona su 1.9.2. Devo ancora testare il metodo .source in 1.9.3 –

+0

@CosminAtanasiu Sì, 'Method # source_location' è lì da molto tempo. Come ho scritto, non esiste un metodo come "Metodo # fonte". Ho usato 1.9.2 e 1.9.3, e non c'era un tale metodo. Ora, io uso 2.0, e non esiste un tale metodo. – sawa

+0

Lo rivedrò nei prossimi giorni per vedere –

Problemi correlati