Problemas con splat operator

Buenas, tengo unos problemillas con el splat operator y quería ver si
alguien me puede ayudar. Escribo primero el código y luego cuento el
problema:

class Reporter
def <<(*args)

end
end

proc = lambda { |*args| @reporter << args }

proc.call(‘first arg’, ‘second arg’)

El problema es que quiero llamar al método “<<” con un número variable
de
argumentos desde dento de un Proc, pero dentro del método “<<” solo me
llega
un argumento que es un array con todos los parámetros. Supongo que el
error
está a la hora de llamar al médodo dentro del proc pero no se como
escribirlo para solucionarlo.

Por si acaso, he estado leyendo el post de Javier sobre el splat
operator
pero no me ha solucionado nada:

Saludos

buenas,

Buenas, tengo unos problemillas con el splat operator y quería ver si

alguien me puede ayudar. Escribo primero el código y luego cuento el
problema:

class Reporter
def <<(*args)

end
end

en ese caso sobre tu objeto reporter puedes hacer
@reporter.<< param1, param2, param3

y te llegarán como un array siempre sin tener que hacerle nada más

saludos,

javier ramírez

ya pero lo que quiero es pasarle los argumentos con los que he llamado
al
proc que de por sí es una lista variable, pero en lugar de llegarme como
un
array con todos los parámetros me llega un array con un parámetro que es
el
array con todos.

On Tue, Apr 29, 2008 at 1:24 PM, Javier R. [email protected]

2008/4/29 David C. [email protected]:

ya pero lo que quiero es pasarle los argumentos con los que he llamado al
proc que de por sí es una lista variable, pero en lugar de llegarme como un
array con todos los parámetros me llega un array con un parámetro que es el
array con todos.

Eso es porque con @reporter << args estas pasando como argumento un
array, y
en la definición del método <<, el spalt esta metiendo ese array como
primer
valor del array con todos los argumentos.

Para conseguir lo que creo que quieres, bastaría con que cambies la
definición del método a:

class Reporter
def <<(args=[])

end
end

Pues si, bien visto Juanjo, creo que estaba obcecado con el proc y no
veía
que la solución era mucho más fácil que todo eso XD.

Gracias

2008/4/29 Juanjo Bazán [email protected]:

También puedes cambiar el proc por

proc = lambda { |*args| @reporter << *args }

que creo que funcionan como tú pedías.

Por cierto, quiza no sea yo quien tenga que hablar pero las últimas
dos dudas que he respondido son más de Ruby que de Rails, y en existe
Rubíes http://ruby.org.es/pages/lista, una lista para asuntos de
Ruby en español que casi nunca recibe ninguna duda.

Suerte.

2008/4/29 David C. [email protected]:

On Apr 29, 2008, at 12:46 , David C. wrote:

proc = lambda { |*args| @reporter << args }

proc.call(‘first arg’, ‘second arg’)

El problema es que quiero llamar al método “<<” con un número
variable de argumentos

Ademas de las otras respuestas, para conseguir el objetivo original te
faltaba un splat mas:

proc = lambda { |*args|  @reporter << *args } # NO FUNCIONA
                                     ^^^

El parser no entiende ese splat:

syntax error, unexpected tSTAR

No le he mirado con detalle pero puede que tenga que ver con que “<<”
tiene pinta de operador. Tecnicamente es posible conseguirlo:

proc = lambda { |*args|  @reporter.<<(*args) }

pero queda un poco sospechoso :-).

– fxn

On Tue, Apr 29, 2008 at 2:31 PM, Xavier N. [email protected] wrote:

end

proc = lambda { |*args|  @reporter.<<(*args) }

pero queda un poco sospechoso :-).

– fxn

Lo cierto es que lo probé con una función, en vez de con el operador
<<, pero es cierto, con el operador parece que no funciona y que la
forma correcta de utilizarlo sería la que propone Xavier.

Probando me he dado cuenta de que

@reporter << ‘a’, ‘b’, ‘c’

Tampoco funciona (digamos que << no se comporta como = cuando trata
con rvalues separados por comas).

Bai.