Below is the code making me confused :
class Foo
protected
def self.baz;end
end
Foo.protected_methods() # => []
Why am I getting empty? I expected [:baz]
···
--
Posted via http://www.ruby-forum.com/.
Below is the code making me confused :
class Foo
protected
def self.baz;end
end
Foo.protected_methods() # => []
Why am I getting empty? I expected [:baz]
--
Posted via http://www.ruby-forum.com/.
Excerpts from Arup Rakshit's message of 2014-01-12 10:32:16 +0100:
Below is the code making me confused :
class Foo
protected
def self.baz;end
endFoo.protected_methods() # =>
Why am I getting empty? I expected [:baz]
Your problem is that the Module#protected method you use ony applies to instance
methods you define, not to class method. This means that the baz class method
you define is not protected at all. Look:
class Foo
protected
def self.baz
puts "Foo.baz"
end
end
Foo.baz
#output: Foo.baz
If you defined an instance method, it would have worked as you expected:
class Foo
protected
def baz #note that now this is an instance method
puts "Foo#baz"
end
end
Foo.new.baz
=> NoMethodError: protected method `baz' called for #<Foo:0x00000000c65458>
To make a class method protected, you have to do so from the class's singleton
class:
class Foo
def self.baz
puts "Foo.baz"
end
end
class << Foo
protected :baz
end
Foo.baz
=> NoMethodError: protected method `baz' called for Foo:Class
I hope this helps
Stefano
Stefano Crocco wrote in post #1132886:
Excerpts from Arup Rakshit's message of 2014-01-12 10:32:16 +0100:
Your problem is that the Module#protected method you use ony applies to
instance
methods you define, not to class method. This means that the baz class
method
Thanks for your explanation.
--
Posted via http://www.ruby-forum.com/\.