2012-07-03 12 views
10

Recientemente descubrí que la creación dinámica de objetos y métodos en Ruby es todo un trabajo, esto podría deberse a mi experiencia previa en Javascript.¿Cómo crear objetos y sus métodos dinámicamente en Ruby como en Javascript?

en JavaScript se pueden crear de forma dinámica y es objeto métodos de la siguiente manera:

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

¿Cómo es el equivalente de llevar a cabo las declaraciones anteriores en Rubí (tan simple como en Javascript)?

+1

Cuando programa Ruby, probablemente no deba tratar de sobrepasar sus enfoques JS. Los lenguajes tienen modelos de objetos bastante diferentes, habrá un desajuste de paradigmas. –

+0

Eso es correcto, gracias por recordarnos. Simplemente necesito un objeto pequeño para tirar que se usa solo en una sola acción en mi aplicación, y tal vez la razón principal es que no quiero hacerlo de manera procesal, es bastante torpe. : D –

+0

Luego debe mirar [OpenStruct] (http://ruby-doc.org/stdlib-1.9.3/libdoc/ostruct/rdoc/OpenStruct.html). –

Respuesta

10

Todo esto es posible con métodos simples. Tenga en cuenta que usted puede hacer esto con todos los objetos, por ejemplo:

str = "I like cookies!" 

def str.piratize 
    self + " Arrrr!" 
end 

puts str.piratize 

cual es la salida:

I like cookies! Arrrr! 

Estos métodos son realmente sólo definen en este solo objeto (de ahí el nombre), por lo que este código (ejecutados después de que el código anterior):

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

solo se produce una excepción:

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

Gran respuesta. Lo he visto antes, pero de alguna manera ni siquiera se me pasa por la cabeza, jajaja. Gracias. :) –

4

Usted puede hacer algo así:

foo = Object.new 

def foo.bar 
    1+1 
end 
Cuestiones relacionadas