Initialize

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

Thanks

“J” == Jonathan L. [email protected] writes:

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

On Sun, 2006-01-01 at 23:06 +0900, ts wrote:

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

“J” == Jonathan L. [email protected] writes:

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 [email protected] writes:

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

On Mon, 2006-01-02 at 00:53 +0900, ts wrote:

“J” == Jonathan L. [email protected] writes:

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.