test_module.rb
module MyModule
def module_func_a
puts "module_func_a invoked"
private_b
end
module_function :module_func_a
private
def private_b
puts "private_b invoked"
end
end
class MyClass
include MyModule
def test_module
module_func_a
end
end
从类调用模块函数
c = MyClass.new
c.test_module
输出 1:
$ ruby test_module.rb
module_func_a invoked
private_b invoked
以类方法风格在模块上调用模块函数
ma = MyModule.module_func_a
输出 2:
module_func_a invoked
test_module.rb:5:in `module_func_a': undefined local variable or method `private_b' for MyModule:Module (NameError)
from test_module.rb:31
从输出 1 和输出 2 可以看出,当在类中包含模块时,从模块函数调用模块的私有方法时不会出现问题,而在类方法样式中直接调用模块上的模块函数时未找到从模块函数调用的模块私有方法。
任何人都可以让我理解上述行为背后的原因以及在类方法样式中调用模块函数(进而调用模块的私有方法)是否可能?如果可能的话,那么我的代码中需要哪些更正才能做到这一点?