Recorrer un Hash o array con simbolos

Buenas,

llevo tiempo atrancado en lo que creo que es una tontería.

Tengo un hash del tipo

@datos= {
:nombre=>“Pedro”,
:apellidos=>“Marin”,
:agenda_id=>5
}

y un array con los campos que quiero modificar

campos = [:nombre, :agenda_id]

Estoy haciendo una función a la que le paso @campos y que dependiendo
del
tipo de dato (String o Number) me cambie el valor en @datos

por ejm:

def mod_datos(campos)
@campos.each {|index|
if @datos[index].is_a?(String)
@datos[index] = “”+@datos[index]+""
else
@campos[index] = @datos[index]+5
end
}
end

si ejecuto mod_datos(campos) deberia quedar @datos asi

@datos= {
:nombre=>“Pedro”,
:apellidos=>“Marin”,
:agenda_id=>10
}

el problema, al ser el índice un símbolo no consigo “recuperarlo” en el
each

¿Como puedo recorrer el obtener y usar los simbolos al recorrer un hash
o un
array?
¿Puedo convertir una cadena en un símbolo?

Espero haberme explicado. Gracias.

lo tienes bien. el problema está en que en la segunda condición estás
intentando modificar el valor de @campos en lugar de @datos. sería algo
así:


else
@datos[index] = @datos[index] + 5
end

de todas maneras veo que estás modificando variables de instancia pero
estás pasando un parámetro que finalmente no utilizas, lo que no tendría
mucho sentido…

saludos

On Sat, 2006-12-02 at 01:36 +0100, Pedro Marín wrote:

}
por ejm:


Ror-es mailing list
[email protected]
http://lists.simplelogica.net/mailman/listinfo/ror-es

/**

El parametro campos lo uso en el iterador (en el ejmplo le sobra la @),
es
el que me dice que campos voy a modificar.
Que fallo mas tonto, ese es el problema de no descansar cuando te pasan
estas cosas.

Gracias!!!

2006/12/2, Borja Martín [email protected]:

Hola Pedro

Tené en cuenta que el each sobre un Hash te envía como parámetro al
bloque un Array con dos argumentos: key y value.

Una forma de hacer esto sería:

def mod_datos(campos)
campos.each do |key, value|
if @datos[key].is_a?(String)
@datos[key] = “”+@datos[key]+""
else
@datos[key] = @datos[key]+5
end
end
end

La forma de “convertir” un String en un Symbol es String#to_sym

saludos!

Que yo sepa a nivel global no lo tienen instalado, e instalartelo tú
a
nivel personal supongo que sí que se podrá, aunque nunca he visto
ningún tutorial ni documentación al respecto.

Otra cosa es que te funcione, puesto que seguro tienen la mayoría de
puertos capados, pero no sé si esto llegará a ser un problema para
comunicarse con otro proceso dentro de la misma máquina.

Un saludo.

se puede usar memcached en dreamhost?¿
supongo q no porque no lo encuentro…

gracias

marze
[email protected]