Q) about singleton methods and access control

Hmmm… doesn’t make much sense to my C++ mind and freshly battered Ruby mind, but I’ll accept it.
Thanks for the help guys (Christoph, Kent). I’ll use the ‘send’ hack for now. :>

Cheers,
Patrick Bennett

···

-----Original Message-----
From: Kent Dahl [mailto:kentda@stud.ntnu.no]
Sent: Tuesday, August 13, 2002 3:30 AM
To: ruby-talk ML
Subject: Re: Q) about singleton methods and access control

Patrick Bennett wrote:

Christoph wrote:

No, the call is on the ``class Level’’ - for example I get

No it’s not. I was calling testObj.xxxxx - that’s definitely an
“instance” level call. :
Arrgggh…

You are missing the point. When you call testObj.xxxx, yes you are
calling a instance method. However, you are not making an instance
level call. What is meant by “instance level” is the context the call is
made from. And the context is a class singleton method, not an instance
method.

HTH

“Bennett, Patrick” wrote

Hmmm… doesn’t make much sense to my C++ mind and freshly battered Ruby
mind, but I’ll accept it.
Thanks for the help guys (Christoph, Kent). I’ll use the ‘send’ hack for
now. :>

One thing to keep in mind - is that C++'s and Ruby’s
protected access controls'' are related put private
access controls" are totally different animals - e.g.

···

class A {
public:
void use_private_meth1() {
this → private_meth();
}
void use_private_meth2(A &b) {
b.private_meth();
}
private:
void private_meth() {}
};

int main() {
A a,b;
a.use_private_meth1();
a.use_private_meth2(b);
return 1;
};

compiles and runs just fine, but Ruby will choose
the exception variants in a similar situation.


class A
def use_private_meth1
self.private_meth
end
def use_private_meth2(b)
b.private_meth()
end
private
def private_meth
end
end

a,b = A.new,A.new

begin
a.use_private_meth1()
rescue NameError => mes
puts mes
end

begin
a.use_private_meth2(b)
rescue NameError => mes
puts mes
end

/Christoph