2012-07-03 12 views
10

Recentemente ho scoperto che la creazione dinamica di oggetti e metodi in Ruby è piuttosto un lavoro, questo potrebbe essere dovuto alla mia esperienza di base in Javascript.Come creare oggetti ed i suoi metodi in modo dinamico in Ruby come in Javascript?

in JavaScript è possibile creare in modo dinamico ed è oggetto metodi come segue:

function somewhere_inside_my_code() { 
    foo = {}; 
    foo.bar = function() { /** do something **/ }; 
}; 

Come è l'equivalente di compiere le dichiarazioni di cui sopra in Ruby (semplice come in Javascript)?

+1

Quando si programma Ruby, probabilmente non si dovrebbe provare a eseguire il porting sugli approcci JS. Le lingue hanno modelli di oggetti abbastanza diversi, ci sarà un mismatch di paradigmi. –

+0

Questo è corretto, grazie per avermelo ricordato. Ho semplicemente bisogno di un oggetto piccolo che viene utilizzato solo all'interno di una singola azione nella mia app, e forse la ragione principale è che non voglio farlo in modo procedurale, è piuttosto goffo. : D –

+0

Quindi si dovrebbe guardare [OpenStruct] (http://ruby-doc.org/stdlib-1.9.3/libdoc/ostruct/rdoc/OpenStruct.html). –

risposta

10

È possibile raggiungere questo obiettivo con metodi Singleton. Si noti che si può fare questo con tutti gli oggetti, ad esempio:

str = "I like cookies!" 

def str.piratize 
    self + " Arrrr!" 
end 

puts str.piratize 

che sarà in uscita:

I like cookies! Arrrr! 

Questi metodi sono in realtà solo definiti su questo singolo oggetto (da cui il nome), pertanto questo codice (eseguito dopo il codice qui sopra):

str2 = "Cookies are great!" 
puts str2.piratize 

tiri solo un'eccezione:

undefined method `piratize' for "Cookies are great!":String (NoMethodError) 
+0

Ottima risposta. L'ho visto prima, ma in qualche modo non mi passa nemmeno per la testa, ahahah. Grazie. :) –

4

si può fare qualcosa di simile:

foo = Object.new 

def foo.bar 
    1+1 
end 
Problemi correlati