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 Counter user #450312
_______________________________________________
Ruby mailing list
[email protected]
http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar

Responder a