Ruby 显式和隐式调用方法的区别是什么?
根据我的理解,在ruby中,我们不能对self调用私有方法(显式地对self调用私有方法是不可能的)。如果你调用一个没有任何接收者的方法,那么它会在self上被调用,那么为什么我们不能调用self本身的私有方法呢 抱歉,我没有真正理解显式和隐式调用(有self和无self)的区别Ruby 显式和隐式调用方法的区别是什么?,ruby,Ruby,根据我的理解,在ruby中,我们不能对self调用私有方法(显式地对self调用私有方法是不可能的)。如果你调用一个没有任何接收者的方法,那么它会在self上被调用,那么为什么我们不能调用self本身的私有方法呢 抱歉,我没有真正理解显式和隐式调用(有self和无self)的区别 我知道我可能会落选,但我还是想知道。有人能告诉我吗。至少在核磁共振成像中,这些概念是相同的。显式调用是公共调用,隐式调用是私有调用 解析器识别三种方法调用: 带有显式接收器的方法,例如obj.foo(1) 具有隐式接收
我知道我可能会落选,但我还是想知道。有人能告诉我吗。至少在核磁共振成像中,这些概念是相同的。显式调用是公共调用,隐式调用是私有调用 解析器识别三种方法调用:
obj.foo(1)
foo(1)
foo
CALL\u PUBLIC
CALL\u FCALL
CALL\u VCALL
if (((noex & NOEX_MASK) & NOEX_PRIVATE) && scope == CALL_PUBLIC) {
return NOEX_PRIVATE;
}
也就是说,如果方法是私有的,调用类型是公共的,则不要调用该方法(受保护的调用的工作方式相同,但也检查接收方的类)
因此,每当有一个显式的接收者(即使它是实例方法定义中的
self
),该调用就是一个“公共调用”。如果不必考虑self
,我想实现会更容易。类似于:如果方法是私有的,并且有一个接收者,那么提出一个NoMethodError
。受保护的调用如何?受保护的调用实际上只是一个私有调用,在返回之前需要额外检查接收者的类。在访问控制方面,逻辑只关注公共与非公共。