- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在 module_function 中看到了这个例子在 ruby 文档中。我不明白代码的后半部分,其中 Mod.one 返回旧的“这是一个”,而 c.one 返回更新后的“这是新的”。这是怎么发生的
这是文档中的实际代码
module Mod
def one
"This is one"
end
module_function :one
end
class Cls
include Mod
def call_one
one
end
end
Mod.one #=> "This is one"
c = Cls.new
c.call_one #=> "This is one"
module Mod
def one
"This is the new one"
end
end
Mod.one #=> "This is one"
c.call_one #=> "This is the new one"
为什么 Mod.one 返回旧代码但 Cls 对象能够访问新代码?谢谢。
最佳答案
运行 module_function 会在模块级别复制一个函数,也就是说,它等同于以下代码:
module Mod
def Mod.one
"This is one"
end
def one
"This is the new one"
end
end
Mod.one
和 one
是不同的方法。第一个可以从任何地方调用,第二个在您将模块包含在类中时成为实例方法。
关于ruby - ruby 文档中的 module_function 示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5153648/
在 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
我是一名优秀的程序员,十分优秀!