method visibility VS accessibility

T

Thai Le

Hi guys,
I've done java for a few years and ruby is pretty new to me. In java, a
method has visibility(private, protected, public) and
accessibility(static, non-static); however, in ruby how can I declare
the method: "public static method1"? It seem that the default visibility
of a method is public in ruby, am i correct?
One morething is that java program starts from "public static main()".
What is the entry point to ruby program?
Thanks in advance
 
R

Robert Klemme

I've done java for a few years and ruby is pretty new to me. In java, a
method has visibility(private, protected, public) and

Actually there are four of them: you have to add "package" visibility to
the list. :)
accessibility(static, non-static); however, in ruby how can I declare
the method: "public static method1"? It seem that the default visibility
of a method is public in ruby, am i correct?

Yes. Strictly speaking there are no static methods in Ruby. But it has
the concept of singleton methods that are defined for a single instance
only. And since classes are just ordinary objects you can define
instance methods of class objects and achieve basically the same as with
Java's static methods:

class Foo
def self.a_class_method
# ...
end

def an_instance_method
self.class.a_class_method
self.another_class_method
end
end

def Foo.another_class_method
# ...
end
One morething is that java program starts from "public static main()".
What is the entry point to ruby program?

The situation is a bit different because Ruby is interpreted. If you
want, you can view the root script you invoke as the body of main, i.e.,
code is executed top down. However, part of this execution are class,
method and constant definitions. Invocation arguments are accessible
via ARGV (and also ARGF which is a special shortcut which will read from
all files in ARGV). So, strictly speaking there is no equivalent of
Java's and C's "main" but the functionality is there.

Kind regards

robert
 
K

Kalman Noel

Robert Klemme:
class Foo
def self.a_class_method
# ...
end

def an_instance_method
self.class.a_class_method
self.another_class_method ^^^^^^^^^^^^^^^^^^^^^^^^^
end
end

def Foo.another_class_method
# ...
end

It seems that you did not write what you meant in the marked line.

Kalman
 
T

Thai Le

Robert said:
Yes. Strictly speaking there are no static methods in Ruby. But it has
the concept of singleton methods that are defined for a single instance
only. And since classes are just ordinary objects you can define
instance methods of class objects and achieve basically the same as with
Java's static methods:

class Foo
def self.a_class_method
# ...
end

def an_instance_method
self.class.a_class_method
self.another_class_method
end
end
So if i have a class method, I can invoke that method from anywhere by
using class name like: Foo.a_class_method() without declaring public for
that method?
 
G

gga

So if i have a class method, I can invoke that method from anywhere by
using class name like: Foo.a_class_method() without declaring public for
that method?

Yes. You can use either of:

Class::method
or
Class.method
 

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,900
Latest member
Nell636132

Latest Threads

Top