This works:
class Test class << self private def foo puts "bar" end end foo #=> "bar" end Test.foo #=> NoMethodError: 'foo' is a private method; # That's we want!
This works, too:
class Test class << self def foo puts "bar" end private :foo end foo #=> "bar" end Test.foo #=> NoMethodError
And this:
class Test def self.foo puts "bar" end class << self private :foo end foo #=> "bar" end Test.foo #=> NoMethodError
Putting the private outside class << self doesn't work:
class Test def self.foo puts "bar" end private self.:foo #=> Syntax error: unexpected tSYMBEG private :self.foo #=> Error: undefined method "foo" for :self private :"self.foo" #=> Error: undefined method "self.foo" for Test end
And the following tests won't work, too:
class Test class << self private end # by closing this block, the scope of "private" is also closed, # even if we reopen the block right next: class << self def foo puts "bar" end end foo #=> "bar" end Test.foo #=> "bar"
class Test class << self private end def self.foo puts "bar" end foo #=> "bar" end Test.foo #=> "bar"
No comments:
Post a Comment