- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试覆盖这样定义的 Rails 辅助方法:
class Foo
module Bar
def orig
# orig code
end
alias o orig
module_function :o
module_function :orig
end
end
这样我就可以覆盖并向 orig
和 o
添加功能,如下所示:
def orig
# new code
# super (run orig code)
end
alias o orig
我已经查看了 several different monkey patching methods但它们似乎不起作用。我相信 module_function
是导致它失败的原因。
有人知道我怎样才能做到这一点吗?
最佳答案
这里有一个解决方法。您可以重新打开模块,对原始实例方法进行未绑定(bind)引用,然后重新定义它以调用原始方法(具有一些改变的行为)。
首先是原始定义:
module Foo
def bar(arg)
"self=#{self}, arg=#{arg}"
end
module_function :bar
end
接下来,重新打开并重新定义方法:
module Foo
OrigBarMethod = instance_method(:bar)
def bar(arg)
Foo::OrigBarMethod.bind(self).call(arg + 1)
end
module_function :bar
end
puts Foo.bar(1) # => "self=Foo, arg=2"
我使用了bind(self)
,这样原来的方法仍然可以使用self
,例如:
class MyClass
include Foo
end
MyClass.new.send(:bar, 1) # => "self=#<MyClass:0x00007fb66a86cbf8>, arg=2"
关于ruby-on-rails - 覆盖 ruby 类中的 module_function 以访问原始文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53235417/
在 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
我是一名优秀的程序员,十分优秀!