"Is 'eval' supposed to be nasty?" inspiró éste:¿Cuándo se justifica `eval` en Ruby?
Parcialmente todo el mundo está de acuerdo en que eval
es malo, y en la mayoría de los casos no es más elegante reemplazo/más seguro.
Así que quería preguntar: si eval
se utiliza tan a menudo, ¿es realmente necesario como función de idioma? ¿Está haciendo más mal que bien?
Personalmente, el único lugar en el que me resulta útil es para interpolar cadenas proporcionadas en el archivo de configuración.
Editar: El propósito de esta pregunta es obtener tantos casos reales como sea posible cuando eval es la única o la mejor solución. Por lo tanto, por favor, no entre en la dirección "debe un idioma limitar la creatividad de un programador".
Edit2: Y cuando digo eval
, por supuesto me refiero a eval
ing cadena, no pasa bloque de rubí a instance_eval
o class_eval
.
Sé que esto va más allá del alcance de la pregunta principal, pero tengo curiosidad por saber en qué casos de uso real se deben asignar dinámicamente variables locales/globales, es decir, cuando se utilizan atributos de instancia y métodos apropiados, instance_variable_set y instance_variable_get no funcionan ? –
Bueno, no siempre quiere almacenar cosas más allá de la invocación al método, y algunas veces quiere usar variables locales para determinar a qué ivars se le asigna. Un lugar donde esto puede ser útil es eliminar la repetición. A menudo, un inicializador tomará argumentos y los asignará a variables de instancia con nombre idéntico. Con 'eval', podría abreviar esto a algo así como' set_ivars (binding) '. – Chuck
este modismo es útil, y solo es posible con eval: 'eval ('self', block.binding)' – horseyguy