access specifiers

S

Sourav

Hi,
I am new to Ruby and after progamming in several other languages, I am
really enjoying the fun of Ruby. I had question regarding the access
specifiers in Ruby; suppose the following two classes,

class C1
private
def aMethod
"I am a method"
end
end

class C2 < C1
public :aMethod
end

In C1, aMethod was private, but in C2 it became public... so this way,
any private method of a class can be converted to public methods. So
then what is the use of having them (private methods) in the first
place at all! In C++, there is a rule that, an object (data or
function) of lower access-specifier can be upgraded to higher
acc-specifier but the reverse is not true. Should it not also be
implemented in Ruby?

I'm a beginner, so please let me know if I'm missing anything. Thanks
in advance.
 
M

MonkeeSage

Sourav said:
In C1, aMethod was private, but in C2 it became public... so this way,
any private method of a class can be converted to public methods. So
then what is the use of having them (private methods) in the first
place at all! In C++, there is a rule that, an object (data or
function) of lower access-specifier can be upgraded to higher
acc-specifier but the reverse is not true. Should it not also be
implemented in Ruby?

Hi there,

In ruby they are more like hints. If the programmer wants to make a
method public, then the assumption is that they know what they are
doing.

You could make it harder on them (and yourself) to make something
public again by overriding the Class#public method:

class Class
def public(*methods)
warn "You naughty programmer, that's private!"
end
end

But I wouldn't recommend doing it.

Regards,
Jordan
 
G

Gene Tani

Sourav said:
Hi,
I am new to Ruby and after progamming in several other languages, I am
really enjoying the fun of Ruby. I had question regarding the access
specifiers in Ruby; suppose the following two classes,

class C1
private
def aMethod
"I am a method"
end
end

class C2 < C1
public :aMethod
end

In C1, aMethod was private, but in C2 it became public... so this way,
any private method of a class can be converted to public methods. So
then what is the use of having them (private methods) in the first
place at all! In C++, there is a rule that, an object (data or
function) of lower access-specifier can be upgraded to higher
acc-specifier but the reverse is not true. Should it not also be
implemented in Ruby?

Yes, there's a few ways to circumvent "private" declarations:
Object#send (this will change in 1.9), delegate with instance_eval,
anonymous modules. In your example, you don't have to subclass the
class with private methods, you can simply re-open the class definition
and declare them public.
 
S

Sourav

Hmmmm... thnx, I got it. In Ruby it's not that much rigid as C++/Java.
And I think it's better like this.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,744
Messages
2,569,482
Members
44,901
Latest member
Noble71S45

Latest Threads

Top