initialize

  • Thread starter Jonathan Leighton
  • Start date
T

ts

J> Should initialize() be public, private or protected, and why?

moulon% cat b.rb
#!/usr/bin/ruby
class A
protected
def initialize
end
end

p A.private_instance_methods(false)
p A.protected_instance_methods(false)
moulon%

moulon% ./b.rb
["initialize"]
[]
moulon%



Guy Decoux
 
J

Jonathan Leighton

J> Should initialize() be public, private or protected, and why?

moulon% cat b.rb
#!/usr/bin/ruby
class A
protected
def initialize
end
end

p A.private_instance_methods(false)
p A.protected_instance_methods(false)
moulon%

moulon% ./b.rb
["initialize"]
[]
moulon%

Thanks for the reply. Forgive me, but I don't understand what the point
is in your example? Or why initialize is returned by
private_instance_methods() but not protected_instance_methods()? Could
you elaborate a bit please?

Thanks
 
T

ts

J> Thanks for the reply. Forgive me, but I don't understand what the point
J> is in your example? Or why initialize is returned by
J> private_instance_methods() but not protected_instance_methods()? Could
J> you elaborate a bit please?

#initialize (like #initialize_copy) is *always* a private method. Even if
you try to define it as public or protected, ruby will make it a private
method.


Guy Decoux
 
T

ts

t> #initialize (like #initialize_copy) is *always* a private method. Even if
t> you try to define it as public or protected, ruby will make it a private
t> method.

Well, there is an exception when you redefine its state after the creation

moulon% cat b.rb
#!/usr/bin/ruby
class A
def initialize
end
protected :initialize
end

A.new
moulon%

moulon% ./b.rb
/b.rb:8:in `new': protected method `initialize' called for #<A:0xb7d64e94> (NoMethodError)
from ./b.rb:8
moulon%

Guy Decoux
 
J

Jonathan Leighton

J> Thanks for the reply. Forgive me, but I don't understand what the point
J> is in your example? Or why initialize is returned by
J> private_instance_methods() but not protected_instance_methods()? Could
J> you elaborate a bit please?

#initialize (like #initialize_copy) is *always* a private method. Even if
you try to define it as public or protected, ruby will make it a private
method.

Ah, okay, thanks.
 

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

Similar Threads


Members online

Forum statistics

Threads
474,201
Messages
2,571,049
Members
47,655
Latest member
eizareri

Latest Threads

Top