Dudilla ruby

Iniciado por rubyestaroto, 11 Diciembre 2013, 16:05 PM

0 Miembros y 1 Visitante están viendo este tema.

rubyestaroto

Hola a todos, estoy empezando a aprender este lenguaje y tenía una duda respecto a los iteradores.
Supongamos que tenemos la siguiente clase:
Código (ruby) [Seleccionar]

class Colegio

def initialize()
 @arrayAlumnos=[]
 @arrayProfesores=[]
 @arrayAsignaturas=[]
end

end


Mi duda era como podría crear un iterador (each por ejemplo) que solo iterase ante un determinado array (que es un atributo/variable de la clase), por ejemplo eachAlumnos() {| x | puts x} iterararía solo sobre los alumnos y para llamarlo se pondría eachAlumnos(){ ... } y no @arrayAlumnos.each() {...} como haríamos con un iterador normal.


Muchas gracias por todo de antemano. Saludos!!!

Shell Root

No entendí un carajo! jjajjaa
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

Eleкtro

#2
Cita de: rubyestaroto en 11 Diciembre 2013, 16:05 PMy para llamarlo se pondría eachAlumnos(){ ... } y no @arrayAlumnos.each() {...} como haríamos con un iterador normal.

Hola,
No me ha quedado claro si tu intención es reinventar la rueda de un For Each de forma universal?, o crear varios métodos distintos PREDEFINIDOS para esa Class para que simulen un For Each.
¿se trata sólamente de hacer lo mismo pero escribiendo (un poco) menos? xD

En mi opinión si "eachALGO" pretendes hacerlo genérico no tiene ni pies ni cabeza pues .each es una extensión de una Colección mientras que eachALGO no es nada y no podría ser lo mismo puesto que no puedes aplicarlo a ningún objeto, no sería un método de un objecto, sería un método, sin más, entonces no podrías utilizarlo de forma dinámica.

Aunque hace mucho que no programo en Ruby pero está claro que en un lenguaje ni usando Lambdas ni magia podrías instanciar métodos de forma dinámica de la manera en la que lo has planteado símplemente escribiendo "eachLOQUESEA" y que el método se crease por si solo, no, yo pienso que la única solución sería crear tu mismo los métodos necesarios (eachAlumnos() eachLoquesea()) cada uno por separado, con su nombre de método y sus instrucciones preestablecidas por ti dentro del Script, claro, y que cada método hiciese un For Each, es decir, creas el método "eachALUMNOS" y haces un .each en el array que tú, préviamente, hayas declarado en las órdenes de dicho método.

Saludos!

Edito: O bien podrías hacer algo parecido a este método :

Código (ruby) [Seleccionar]
# -*- coding: UTF-8 -*-

days = [ "Monday",
        "Tuesday",
        "Wednesday",
        "Thursday",
        "Friday",
        "Saturday",
        "Sunday"
      ]

def each(collection, &procedure)
 procedure.call(collection)
end

each(days) {|var|print var}

sleep 5
Process.exit

__END__


Saludos