gpt4 book ai didi

ruby - Ruby 类的 module_function

转载 作者:数据小太阳 更新时间:2023-10-29 08:47:55 26 4
gpt4 key购买 nike

据我了解,ruby 类除了具有能够实例化它的附加功能外,它们几乎与模块相同。由于 Class 继承自 Module,我假设每个类(类 Class 的对象)都可以访问 module_function,但似乎并非如此。在做Module和Class的private_instance_methods差异时,发现ModuleClass多了3个方法 - [:append_features, :extend_object, :module_function]

这些函数是如何从 Class 对象的调用链中删除的,更重要的是为什么?

最佳答案

那些核心特性都是用C实现的,所以讨论它不具有普遍性,也没有用。在 Ruby 中,您可以使用 undef 取消定义继承的方法,而无需取消定义父类(super class)中的方法。

class Foo
def foo; end
end
class Bar < Foo
undef :foo
end
Foo.new.foo
# => nil
Bar.new.foo
# => NoMethodError: undefined method `foo' for #<Bar:0x007f85c3ce3330>
  • append_features 是一个在模块被 include-d 之前调用的 Hook ,它可以是一个模块,但不是一个类。
  • extend_object 是一个 Hook ,在模块被 extend 之前调用,模块可以是,但类不是。
  • module_function 的目的是将该方法兼作类方法和私有(private)实例方法,后者在您包含该模块时很有用,这可以通过模块完成,但不能通过一个类(class)。

关于ruby - Ruby 类的 module_function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21766081/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com