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

Responder a