在ruby上,为什么include
是private,而Object#extend
是public?
最佳答案
Object#extend
必须 是公开的,否则您将无法使用它。毕竟,它的目的是将模块混合到对象中,因此您通常会像 obj.extend(Foo)
那样调用它,这对于私有(private)方法是不可能的。
Module#include
通常只在模块体内使用,如下所示:
class Bar
include Foo
end
即它通常在没有接收者的情况下被调用,所以它不必公开。当然,它也必须是私有(private)的。
我猜它之所以是私有(private)的是因为它更具侵入性,因为它改变了 Bar
的 every 实例的行为,而 Object# extend
仅更改单个对象。因此,Module#include
在某种意义上“更危险”,因此被设为私有(private)。
我不知道这是否是真正的原因,但它与其他类似的方法如 Module#define_method
是一致的。
关于ruby - 在 ruby 上,为什么 include 是私有(private)的而 extend 是公共(public)的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4213837/