No es un reemplazo para method_missing, para para tu caso especifico --missing
accessors-- puede servirte lo siguiente:
require 'ostruct'
usuario= OpenStruct.new
usuario.apellido= "Cibrian"
usuario.nombre= "Pepito"
usuario.prefiere= "Hombres"
puts "#{ usuario.nombre} #{ usuario.apellido} prefiere #{ usuario.prefiere}"
usuario.edad= :indefinida
puts "Edad de #{ usuario.nombre} #{ usuario.apellido}: #{ usuario.edad}"
Si conoces los campos de tu registro, en vez de usar OpenStruct podes usar
Struct:
Struct.new "Usuario", :nombre, :apellido, :edad # <<< Genera clase
Struct::Usuario
usuario= Struct::Usuario.new "Carlos", "Mata", 45
puts usuario.nombre
usuario.values.each do |v|
puts v
end
Porta <[EMAIL PROTECTED]> escribió: Que campeón. Justo lo que quería.
mil gracias....
On 9/12/07, Aureliano Calvo <[EMAIL PROTECTED] > wrote:Bueno, en ruby cuando se
ejecuta un método no definido se llama al
método "method_missing". Y como hacer
a.b = c es llamar al método "b=", si no definiste ejecuta method_missing.
La documentación de esto está en
http://www.ruby-doc.org/core/classes/Kernel.html#M005929
Bueno, me voy a dormir,
Aureliano.
On 9/12/07, Porta <[EMAIL PROTECTED]> wrote:
> Aureliano.
> gracias por tu pronta respuesta.
> lamentablemente, el autoload de perl del que hablo nada tiene que ver con el
> de ruby
> veamos si puedo ampliar un poco la question.
>
> (mi léxico sobre el tema es *cero*. no soy un teórico. sepan disculpar.)
>
> supongamos que creo una "clase" con perl. (yo lo llamo paquete o módulo).
> supongamos mi clase "Usuario".
> adentro de mi clase Usuario, yo defino diferentes funciones para *escribir*
> y *leer* los atributos de esa clase (creo que se llaman comunmente setters y
> getters)
> de modo que con mi objeto Usuario, yo puedo hacer:
> $usuario->Nombre('Jorge');
> (acabo de darle el nombre Jorge a mi $usuario)
> o decir que
> $nombre = $usuario->Nombre;
> (digo que mi variable $nombre es igual al Nombre de mi $usuario)
>
> hasta acá, todo bien. la lógica sería tener 2 funciones adentro de mi clase
> usuario. una para asignar el nombre y otra para leerlo. o una sola, que si
> recibe un parametro lo setea como nombre, y si no recibe parámetro devuelve
> el nombre que haya.
> ahora, si yo en mi clase usuario no definí ninguna función que se llame
> Apellido
> (si intento hacer)
> $usuario->Apellido('Gomez');
> ahi se rompe todo. porque Apellido no existe en ningun lado.
>
> Bueno. En perl, la función AUTOLOAD se ejecuta cada vez que uno accede a
> alguna propiedad de esa clase. O sea, que adentro del AUTOLOAD yo puedo
> *atajar* llamados a funciones que no existen y, por ejemplo, devolver un
> error un poco más amable. O sino (lo que a mi me interesa hacer
> puntualmente). poder crear "en el aire" ese atributo en mi clase y setearlo
> o leerlo según reciba o no parámetros.
>
> Más claro ahora? espero que sí. sino, me busco alguna definición más prolija
> del autoload en perl.
>
> graaaaaacias.
>
> ____________________________________________
> From: "Aureliano Calvo" < [EMAIL PROTECTED] >
> To: "Grupo Ruby Argentina" <[email protected]>
> Date: Wed, 12 Sep 2007 00:14:39 -0300
> Subject: Re: [RubyArg] Buenas, y primera consulta.
>
> No sé cómo funciona el autoload de Perl, pero en ruby hay algo con ese
> nombre.
>
> autoload(:MyModule, "/usr/local/lib/modules/my_module.rb")
>
> hacé que cuando uses MyModule por primera vez ejecute
> "/usr/local/lib/modules/my_module.rb"
>
>
> ________________________________________________
> From: Porta < [EMAIL PROTECTED] >
> To: [email protected]
> Date: Wed, 12 Sep 2007 00:02:23 -0300
> Subject: [RubyArg] Buenas, y primera consulta.
>
> Buenas a todos.
> Me interesa aprender un poco de ruby, y ya al primer paso encuentro un
> problema que no sé como resolver.
> A ver si alguien puede iluminarme.
>
> Sabrá alguien decirme si en ruby existe un equivalente del AUTOLOAD de
> perl? no soy un teórico, así que me cuesta encontrar las palabras para
> explicar *correctamente* lo que necesito... si alguien sabe como funciona el
> autoload en perl me vá a entender. sino, me dicen y busco alguna forma clara
> de explicarlo...
> Lamento que mi primer mail sea tan difuso y poco claro. Espero mejorarlos
> con el tiempo.
>
> Gracias a todos.
>
> Porta.
>
>
>
> _______________________________________________
> Ruby mailing list
> [email protected]
> http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar
>
>
_______________________________________________
Ruby mailing list
[email protected]
http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar
_______________________________________________
Ruby mailing list
[email protected]
http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar
---------------------------------
Los referentes más importantes en compra/venta de autos se juntaron:
Demotores y Yahoo!.Ahora comprar o vender tu auto es más fácil.
Visitá http://ar.autos.yahoo.com/_______________________________________________
Ruby mailing list
[email protected]
http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar