Perdon por meterme, pero method_missing no es conveniente si tenes para usar
eval, send u otra cosa. Con method_missing es dificil de hacer un buen debug
y solo se aplica en ciertos casos (por ejemplo, el find de rails). No estoy
muy de acuero con esa practica tampoco.

El día 29 de mayo de 2008 15:12, Gaston Ramos <[EMAIL PROTECTED]>
escribió:

> El vie, 30 de may de 2008, a las 07:49:09 +2000, Esteban Fornal dijo:
> > fijate method_missing
> >
> > tenes cosas como:
> >
> > def method_missing(method, *args)
> >   if find = method.to_s.match(/^has_(\w*)\?$/)
>
> siguiendo la onda method_missing:
>
> class Foo
>  def method_missing(method_name, *args)
>    if method_name.to_s =~ /^tarea([0-9])+/
>      subtareas.inject {|sum, st| sum + st.send(method_name.to_s)}
>    else
>      self.method_missing(method_name, *args)
>    end
>  end
> end
>
> de todas formas podés explicar un poco más el problema? por que
> suena raro.
>
> >
> > ...
> >
> > 2008/5/29 Lautaro Bonetto <[EMAIL PROTECTED]>:
> > > Hola a todos.
> > >
> > > Necesito hacerles una consulta.
> > > Tengo un sistema en Rails y necesito agregar a un módulos varios
> métodos que
> > > difieren entre sí sólo en un número. Quiero tratar de evitarme tener
> que
> > > escribirlos a todos.
> > > Existe alguna forma de "programar la programación"? Traté de hacerlo
> con
> > > EVAL, pero no me funcionó. Quizás lo hice mal.
> > >
> > > Ejemplo: Dos de los métodos son similares a estos:
> > >
> > > def tarea0_sum
> > >   tot = 0
> > >   subtareas.each do |st|
> > >     tot += st.tarea0
> > >   end
> > >   return tot
> > > end
> > >
> > > def tarea1_sum
> > >   tot = 0
> > >   subtareas.each do |st|
> > >     tot += st.tarea1
> > >   end
> > >   return tot
> > > end
> > >
> > > Tengo que escribir esta función "tareaXX_sum" 20 veces, y lo único que
> varía
> > > es la parte de "tarea0" por "tarea1", "tarea2", "tarea3"... y así hasta
> > > "tarea20".
> > >
> > > Hay alguna forma de evitarme tipear todos los métodos en el modelo?
> > >
> > > Desde ya muchas gracias por la ayuda.
> > >
> > >
> > >
> > _______________________________________________
> > Ruby mailing list
> > [email protected]
> > http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar
>
> --
> "Programs must be written for people to read, and only incidentally for
> machines
> to execute."
>
> (Abelson & Sussman, SICP, preface to the first edition)
>
>
> +-------------------------------------+
> Gastón Ramos
> http://gastonramos.wordpress.com/
> GNU/Linux <http://gastonramos.wordpress.com/GNU/Linux> Counter user
> #450312
> _______________________________________________
> Ruby mailing list
> [email protected]
> http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar
>



-- 
Nicolas Alejandro Santa
Sr. Developer

ELC Technologies (TM)
Santa Barbara, CA 93102
[EMAIL PROTECTED]
[EMAIL PROTECTED]
(866)863-7365 phn
(866)893-1902 fax

http://www.elctech.com

+44 020 7504 1346 Tel - London Office
+44 020 7504 1347 Fax - London Office
_______________________________________________
Ruby mailing list
[email protected]
http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar

Responder a