根据我的理解,在ruby中我们不能在self上调用private方法(在self上调用私有方法是不可能的)。如果你在没有任何接收器的情况下调用一个方法,那么就会在self上调用它,那为什么我们不能用self本身调用一个私有方法呢?
很抱歉,但我并没有明确地和明确地(通过自我和没有自我)进行调用的确切区别。
我知道我可能会投票但仍想知道。有谁能告诉我。
答案 0 :(得分:3)
至少在MRI中,这些概念是相同的。显式调用是公共调用,隐式调用是私有调用。
解析器识别三种方法调用:
obj.foo(1)
foo(1)
foo
评估者将这些中的每一个都识别为不同的“呼叫类型”。这些类型分别是:
CALL_PUBLIC
CALL_FCALL
CALL_VCALL
在拨打电话前会检查此通话类型:
if (((noex & NOEX_MASK) & NOEX_PRIVATE) && scope == CALL_PUBLIC) {
return NOEX_PRIVATE;
}
即。如果方法是私有的并且调用类型是公共的,则不要调用该方法(受保护的调用以相同的方式工作,但也检查接收者的类)。
因此,只要有明确的接收者(即使它是实例方法定义中的self
),该呼叫就是“公共呼叫”。