[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

with and without initialize method

Li Chen

1/9/2007 4:18:00 PM

Hi all,

I try to understand some concepts in Ruby. I define two classes, one
with and the other without initialize method. In order to call the
methods defined in each class I need to call new/initialize method
first. Why is that?


Thanks,

Li

#####################
class X
def hello_1
puts 'Hello_1'
end
end

a=X.new
a.hello_1


####################
class Y
def initialize
end

def hello_2
puts'Hello_2'
end
end

b=Y.new
b.hello_2

######screen output

>ruby test3.rb
Hello_1
Hello_2
>Exit code: 0

--
Posted via http://www.ruby-....

4 Answers

Stefano Crocco

1/9/2007 4:31:00 PM

0

Alle 17:18, martedì 9 gennaio 2007, Li Chen ha scritto:
> Hi all,
>
> I try to understand some concepts in Ruby. I define two classes, one
> with and the other without initialize method. In order to call the
> methods defined in each class I need to call new/initialize method
> first. Why is that?
>
>
> Thanks,
>
> Li
>
> #####################
> class X
> def hello_1
> puts 'Hello_1'
> end
> end
>
> a=X.new
> a.hello_1
>
>
> ####################
> class Y
> def initialize
> end
>
> def hello_2
> puts'Hello_2'
> end
> end
>
> b=Y.new
> b.hello_2
>
> ######screen output
>
> >ruby test3.rb
>
> Hello_1
> Hello_2
>
> >Exit code: 0

The methods you defined are instance methods, i.e they must be called using
instances of the class as receiver; you can't call them from the class
themselves. You need to call new because new returns an instance of the
class. In the first case, where you don't define initialize, the initialize
method of the base class (Object) is called.

If you want to call methods from the class (X.a_method), you must define them
this way:

class X
def X.a_method
#method implementation
end
end

X.a_method

I hope this helps

Stefano

Li Chen

1/9/2007 4:52:00 PM

0

Stefano Crocco wrote:
> The methods you defined are instance methods, i.e they must be called
> using
> instances of the class as receiver; you can't call them from the class
> themselves. You need to call new because new returns an instance of the
> class. In the first case, where you don't define initialize, the
> initialize
> method of the base class (Object) is called.

Thanks and it helps. But when I check which methods are available in
class Object I can't see initialize there. Do I miss something?

Li


irb(main):003:0> puts Object.methods{|m|m.to_s}.sort
...
id
include?
included_modules
inspect
instance_eval
instance_method
instance_methods
instance_of?
instance_variable_get
instance_variable_set
instance_variables
is_a?
...
=> nil



--
Posted via http://www.ruby-....

Stefano Crocco

1/9/2007 5:03:00 PM

0

Alle 17:51, martedì 9 gennaio 2007, Li Chen ha scritto:
> But when  I check which methods are available in
> class Object I can't see initialize there. Do I miss something?

initialize is a private method, so it won't be shown by methods (which only
returns the names of the publicly accessible methods). To see it, you must
use private_methods:

rb(main):003:0> puts Object.private_methods.sort
...
include
included
inherited
initialize
initialize_copy
irb_binding
iterator?
...

Stefano

Li Chen

1/9/2007 5:13:00 PM

0

Stefano Crocco wrote:
>>
> initialize is a private method, so it won't be shown by methods (which
> only
> returns the names of the publicly accessible methods). To see it, you
> must
> use private_methods:
>
> rb(main):003:0> puts Object.private_methods.sort


Thank you very much,

Li

--
Posted via http://www.ruby-....