From: Logan Capaldo Date: 2006-05-10T01:35:06+09:00 Subject: Re: A major ruby annoyance! On May 9, 2006, at 12:21 PM, dblack@wobblini.net wrote: > Hi -- > > On Tue, 9 May 2006, Logan Capaldo wrote: > >> >> On May 8, 2006, at 4:10 PM, dblack@wobblini.net wrote: >> >>> I can't help feeling it's a lot of trouble to do this: >>> >>> class C >>> def initialize >>> self.container = [] >>> end >>> >>> private >>> attr_writer :container >>> end >>> rather than: >>> >>> class C >>> def initialize >>> @container = [] >>> end >>> end >>> if you're just using @container as a state variable here and there. >>> I think the role of the uniform access principle here is open to >>> question. As I understand it, that principle states that the >>> outside >>> user shouldn't be able to tell whether a value is stored or >>> calculated >>> -- essentially, an attribute vs. the return value of a method call. >>> But instance variables are neither attributes nor methods; so >>> they're >>> not really candidates for being evaluated for uniform/non-uniform >>> access. And Ruby's attributes *are* methods. To that extent, Ruby >>> actually enforces the UA principle; when you do this: >>> >>> obj.something >>> you know that you've called a method. There's no other possibility, >>> so there's no opportunity for divergence of the interface. >> >> Well at least if you do it my way, you don't get tripped up by >> typos, ;) > > Why not? :-) > > class C > def initialize > self.contanier = [] > end > > private > attr_writer :container > end > > That will blow up just as much as: > > class C > def initialize > @contanier = [] > end > > def insert(x) > @container << x > end > end > > (It will happen at a slightly different point, of course.) > > > David > Ok, there's _less_ typo trip-ups. > -- > David A. Black (dblack@wobblini.net) > * Ruby Power and Light, LLC (http://www.rubypowerandlight.com) > > Ruby and Rails consultancy and training > * Author of "Ruby for Rails" from Manning Publications! > > http://www.manning.com/black >