Austin Ziegler wrote:

> On Thu, 14 Nov 2002 05:10:40 +0900, Joel VanderWerf wrote:
>> Either way, you're breaking encapsulation--by exposing writers, or
>> by exposing the attrs themselves at the time of construction
>> (only).
> 
> You're right, and in some cases, that's OK (see Text::Format for
> this; I haven't yet modified it to use Lyle's change -- I may not),
> since all of the methods are exposed anyway.

The original implementation (introduced in FXRuby 1.0.14) used 
instance_eval to evaluate the initialization block. I changed it in 
FXRuby 1.0.15 to instead yield 'self' to the block, primarily because 
(as Rich Kilmer so eloquently noted "instance_eval() is evil".

I sort-of agree with Joel's point that either approach breaks 
encapsulation, assuming that the class' public interface doesn't already 
provide writers for the attributes of interest. But I think of the two, 
using instance_eval to explicitly open-up instance variables is 
definitely more brittle. Remember, an instance method that is a "plain 
old" attr_writer today could be replaced in the future by a different 
implementation that does something different (i.e. touches different 
instance variables or whatever).