Paradox: Life is a mystery. Don't waste time trying to figure it out. / Humor: Keep a sense of humor, especially about yourself. It is a strength beyond all measure. / Change: Know that nothing stays the same.
Lo que buscas se llama eval:
http://www.ruby-doc.org/core-1.9.3/Kernel.html#method-i-eval
Quizas sea tan facil como range = eval("(0..10)")
Y bueno, hace falta mencionar que te asegures de no evaluar cadenas
que no sabes de donde vienen. Onda:
eval("`rm *`")
>
> Una vez vi algo parecido cuando estuve trabajando con Sinatra. No
> recuerdo si es una virtud del Sinatra o es Ruby.
>
> En cualquier caso, deseo estar seguro si es posible.
>
> Gracias.
--
--------------------------------------------------------------
EmmanuelOga.com - Software Developer
Es posible, y una opción es usando `eval`.
ACHTUNG! Usar `eval` no es buena idea la mayoría de las veces,
especialmente si tiene que ver con contenido recibido desde usuarios.
Si hacés
$ (eval "(0..10)").include? 5
Te devuelve `true`. De ahí a que sea una buena idea hacerlo, ya es
otra discusión. Tenés que tener mucho cuidado con los strings que
recibe tu aplicación si se los vas a pasar a `eval`.
¿Qué es lo que tenés que solucionar de esta manera? Tal vez exista
otra menos peligrosa.
--
Leandro
(inkel)
Hola gente, estoy trabajando con Rails 3.
Deseo saber si es posible convertir una cadena en código Ruby. Me
explico:
Si tengo esto: variable = "(0..10)"
luego deseo usarlo como un Range para lograr esto: (0..10).include?(5)
Una vez vi algo parecido cuando estuve trabajando con Sinatra. No
recuerdo si es una virtud del Sinatra o es Ruby.
En cualquier caso, deseo estar seguro si es posible.
Gracias.
Solo por el hecho de que esté detrás de un password no quiere decir
que sea "conveniente" (si tenés un administrador con un password
débil, entonces alguien puede ganar acceso a esta sección y luego
ejecutar código arbitrario en tu servidor).
Si no tenés otra forma de hacerlo (*siempre* hay otra forma de
hacerlo, pero quizás no te parece que amerite el esfuerzo buscar una
solución alternativa), al menos asegurate de que no puedan tirar tu
servidor abajo con esta operación.
Algo como:
def safe_eval(str)
old_safe, $SAFE = 4, $SAFE
eval(str)
ensure
$SAFE = old_safe
end
Google es tu amigo para entender cómo funciona y qué hace $SAFE :)
Saludos,
-foca
Er, en realidad, una vez que seteás $SAFE lo suficientemente alto, no
hay forma de bajarlo de nuevo, por lo que te quedaría en 4 (que es
bastante cerrado).
Sorry por el error.
En tu ejemplo:
Range.send(:new, 0, 10).include? 5
Saludos.
On 14 nov, 19:45, Nicolás Sanguinetti <h...@nicolassanguinetti.info>
wrote:
> 2011/11/14 Nicolás Sanguinetti <h...@nicolassanguinetti.info>:
>
>
>
>
>
>
>
>
>
> > 2011/11/14 Edgar Valderrama V. <valderrama...@gmail.com>:
> >> 2011/11/14 Alejandro González <i...@janogonzalez.com>
>
> >>> 2011/11/14 Edgar Valderrama <valderrama...@gmail.com>