我对此感到非常困惑。在《Programming Ruby》一书中,它说,“接收者检查自己类中的方法定义”。
所以类对象存储所有的示例方法。那为什么我不能在类中调用示例方法呢?
举例来说:
class ExampleClass
def example_method
end
example_method
end
我不能在ExampleClass中调用example_method。
但是,如果我在顶层定义一个方法,像这样:
class ExampleClass
def example_method
end
end
def example_method1
end
example_method1
然后我可以调用顶级方法example_method1。
顶级不也是一个职业吗?为什么它与ExampleClass中的调用示例方法不同?
4条答案
按热度按时间6ju8rftf1#
你不能以你写的方式调用这个函数的最大原因是,正如你所说,它是一个示例方法。
试着这样定义它:
我相信你会发现你有一个不同的结果。这不是说它是“顶级”,这是它是否在你正在处理的范围。因为你处理的是一个类,所以类方法是必要的。如果你正在处理一个对象(一个示例化的类),它是一个不同的“作用域”。
gg58donl2#
这些“全局”方法是一个例外。它们被定义为Object的私有示例方法。一切都继承自Object,所以这些方法是“全局”可见的。
mwg9r5ms3#
接收方检查自己类中的方法定义。接收器是
ExampleClass
。ExampleClass
的类是Class
。在Class
类中没有example_method
方法,因此,你得到了一个NoMethodError
。uujelgoq4#
我将试着解释如下。
定义类时打印以下内容:
现在让我们确认这些方法可以从类外部调用。这里不应该有任何惊喜: