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).