From: Eero Saynatkari Date: 2006-01-28T06:33:38+09:00 Subject: Re: class_eval and braces On 2006.01.28 05:15, Bertram Scharpf wrote: > Hi, > > as I notice there is a difference between `class_eval' called > with a block or with a string. Why? Closures again. The @@m in the block is the @@m of M, not the including class. To see this, add a line to your code: > VERSION = :braces > > module M > def self.included c > case VERSION > when :braces then c.class_eval {@@m = rand} > when :quotes then c.class_eval "@@m = rand" > end > end > end > > class C ; @@m = "M" ; def d ; puts @@m ; end ; end > class D ; @@m = "M" ; def d ; puts @@m ; end ; end > > class C ; puts @@m ; end > class D ; puts @@m ; end > C.new.d > D.new.d > > class C ; include M ; end > class D ; include M ; end > > class C ; puts @@m ; end > class D ; puts @@m ; end > C.new.d > D.new.d module M; puts @@m; end > Bertram E