2009/11/2 Nicolás Sanguinetti <[email protected]>:
> 2009/11/2 Lucas Sallovitz <[email protected]>:
>> 2009/11/2 Nicolás Sanguinetti <[email protected]>:
>>> 400.instance_eval { a += self && b += self }
>>
>> Claramente tu enfoque es desprolijo, lo correcto sería:
>>
>> variable1, variable2 = (class Integer { def
>> masigual(*vars){vars.map{|n|
>> n+=self}}}).new(400).masigual(variable1,variable2)
>
> :-/
>
> Hay variables locales ahí. No entendiste nada, bo. :P

Además de que no es ruby valido. No podés usar {} para definir clases
o métodos (no directamente, o sea, podés usar eso en Class.new o
define_method porque reciben un bloque, pero las keywords class y def
no reciben un bloque.

Además, abrir una clase y definir cosas, no devuelve la clase:

(class Integer; end) #=> nil

Como todo en ruby, eso de vuelve la última linea del bloque de código.

En todo caso, tendrías que hacer (class Integer; blah blah; self; end)
para que devuelva la clase.

Y ta, tampoco podés hacer Integer.new(400). Podés hacer Integer(400),
porque hay un método definido en Kernel que se llama igual que la
clase. Para llegar a ese método desde la clase, lo único que se me
ocurre es method(Integer.name).call(400).

Que tá, es chancho, pero meh, a esta altura ya no estamos pensando en eso.

O sea que quedaría en algo como:

a,b=method(Integer.class_eval{define_method(:masigual){|*args|args.map{|n|n+=self}}&&self}.name).call(400).masigual(a,b)

…pero sigue teniendo variables locales :P

>> Lucas.
>> _______________________________________________
>> Ruby mailing list
>> [email protected]
>> http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar
>>
>
_______________________________________________
Ruby mailing list
[email protected]
http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar

Responder a