请考虑一下代码
class Test
private
def self.test
puts 'arst'
end
def test
puts 'arst'
end
class << self
def test2
puts 'arst'
end
private
def test3
puts 'arst'
end
end
end
Test.test
Test.test2
begin
Test.test3
rescue StandardError => e
p e
end
begin
Test.new.test
rescue StandardError => e
p e
end
结果为
arst
arst
#<NoMethodError: private method `test3' called for Test:Class>
#<NoMethodError: private method `test' called for #<Test:0x2c28060>>
类方法Test.test
是不受作用域修饰符private
影响的,可能原因在于self.
的声明方式其实只是class<<self
的语法糖。