there are two things i don't quite understand about this:
1) i thought private methods should never be called through self, and that
they are implicitely called on self. calling a non-accessor private method
on self does raise the expected error. why does the accessor need to be
called using self?
2) when calling the private accessor without using self, its implementation
clearly isn't executed but no exception is raised either... why is that?
Davy Brion wrote:
> def set_the_name(value)
> name = value
> end
To Ruby, that's an assignment to a local variable, which then drops out
of scope. That's why you have to do "self.name= value" to call the
method.
d'oh! of course
If it really were private, you'd need
send(:name=, value)
although being private rather negates the purpose of an 'accessor' which
is to make values accessible
in this case, i only want the accessor to be acessible to the class and its
subclasses, mainly because the subclasses need to be able to override the
'storage mechanism' (ie: backing field vs hash or something)... it's a bid
of an edge-case though
> when calling the private accessor without using self, its
> implementation
> clearly isn't executed but no exception is raised either... why is that?
Because it's perfectly legal to assign a value to a local variable
obviously
···
On Fri, Sep 10, 2010 at 4:18 PM, Brian Candler <b.candler@pobox.com> wrote:
in this case, i only want the accessor to be acessible to the class and its
subclasses, mainly because the subclasses need to be able to override the
'storage mechanism' (ie: backing field vs hash or something)... it's a bid
of an edge-case though
that is called 'protected' not 'private' - just that change should do
it.