Manuel !!
Muchas gracias , espectacular, mas claro imposible !!
Saludos
On 6/3/07, Manuel Aristarán <[EMAIL PROTECTED]> wrote:
Hola Federico,
On 6/3/07, Federico Brubacher <[EMAIL PROTECTED]> wrote:
> [...]
>
> Segun lo q estoy entendiendo cuando hacemos instance_eval de un string,
> accedemos al contexto self de la clase que invoca el instance_eval y
podemos
> por ejemplo acceder a sus propiedades ( o cambiarlas dentro del string
> instance_eval).
>
> O sea :
> estoy en lo correcto con instance_eval?
Absolutamente. Funciona como en otros lenguajes que tienen "eval()"
(JavaScript, por ejemplo). Como decís, Object#instance_eval te permite
evaluar (en el contexto del receptor) un string que contenga código
Ruby o un bloque.
> para que sirve cuando le pasamos un bloque?
Un ejemplo:
objeto.instance_eval("self.algo = 1")
es equivalente a
objeto.instance_eval do
self.algo = 1
end
[Personalmente, trato de evitar usar los métodos *_eval con argumentos
String.]
> porque usar send en los ejemplitos esos ?
Lo que discuten en los comentarios es una manera de mejorar ésto, del
post original:
f = open("myfile")
if f.stat.instance_eval{ readable? and writable? and size? and owned? }
# work with file
end
O sea, ejecutar el if sólo si f.stat.readable?, f.stat.writable?,
f.stat.size? y f.stat.owned? son verdaderos.
Por ejemplo, uno de los comentarios:
if %w{readable? writable? size? owned?}.all? { |m| f.stat.send(m) }
# work with file...
end
usa Enumerable#all? [1], que retorna verdadero si el bloque evalúa
verdadero para todos los miembros del array.
En este caso, los miembros del array son nombres de métodos que se le
envían a f.stat mediante Object#send
Como bien dice uno de los que comentan en el post de _why:
"...obfuscated enough to be interesting ;)"
Saludos!
[1] http://ruby-doc.org/core/classes/Enumerable.html#M003162
--
Manuel Aristarán <[EMAIL PROTECTED]>
Web Development - http://jazzido.com
Buenos Aires, Argentina
_______________________________________________
ruby mailing list
[email protected]
http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar
--
Federico Brubacher
www.fbrubacher.com
Colonial Duty Free Shop
www.colonial.com.uy
_______________________________________________
ruby mailing list
[email protected]
http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar