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.