- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
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 可以看出,当将模块包含在类中时,从模块函数调用模块的私有(private)方法时不会出现任何问题而如果以类方法样式直接调用模块上的模块函数,则找不到从模块函数调用的模块私有(private)方法。
任何人都可以让我理解上述行为背后的原因,以及是否可以以类方法样式在模块上调用模块函数(反过来调用模块的私有(private)方法)?如果可能,那么我的代码中需要进行哪些更正才能做到这一点?
最佳答案
当您将模块包含在一个类中时,它会起作用,因为所有模块的方法都会包含在该类中(module_func_a
中的 self
指向 MyClass
,它也有 private_b
方法)。
在另一种情况下,self 指向 MyModule
,它没有 private_b 方法。如果您希望它以两种方式工作,则必须将 private_b
也声明为模块方法,或者只需将行 extend self
添加到 MyModule
,这样它的所有方法都将成为模块方法。
关于Ruby module_function,调用模块的私有(private)方法,在模块的类方法样式中调用显示错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10042807/
在 ruby 中,我知道可以使用 module_function 在模块中混合使用模块函数,如此处所示。我知道这是多么有用,因此您可以在不混入模块的情况下使用该函数。 module MyModul
据我了解,ruby 类除了具有能够实例化它的附加功能外,它们几乎与模块相同。由于 Class 继承自 Module,我假设每个类(类 Class 的对象)都可以访问 module_function,但
似乎如果您希望能够调用模块(/类)上的方法,那么您正在寻找一个单例...如果是这种情况,您最好使用类方法或Singleton mixin(不寻找其中一个“更好”的答案)。 我在使用 #module_f
我在 module_function 中看到了这个例子在 ruby 文档中。我不明白代码的后半部分,其中 Mod.one 返回旧的“这是一个”,而 c.one 返回更新后的“这是新的”。这是怎么发生的
注意:此问题已发布在 Ruby-Forum没有得到答案 考虑这个模块: module MM def f end def self.g end module_function :f
test_module.rb module MyModule def module_func_a puts "module_func_a invoked" priv
extend self 和 module_function 是实现它的两种 ruby 方法,因此您可以在模块上调用方法,如果包含该模块也可以调用它。 这些方式的最终结果有什么不同吗? 最佳答案 m
在阅读开源的 Ruby 代码和编写可维护性的代码经常遇到这两者的使用,那么他们两者的共同点和区别是什么呢? module_function Ruby 的 module 是 method 和 co
主要问题:在Ruby API docs对于 module_function 方法,我看到了以下代码示例: module Mod def one "This is one" end
我正在尝试覆盖这样定义的 Rails 辅助方法: class Foo module Bar def orig # orig code end alias o o
在 Ruby 中用 module_function 定义一个模块函数和用 self. 定义它一样吗?也就是说,它们是否都会导致实例方法和模块方法的创建? 最佳答案 没有。 module M1 de
我是一名优秀的程序员,十分优秀!