gpt4 book ai didi

ruby - 显式调用和隐式调用方法有什么区别?

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

根据我的理解,在 ruby​​ 中我们不能调用 self 的私有(private)方法(显式调用 self 的私有(private)方法是不可能的)。如果你在没有任何接收者的情况下调用一个方法,那么它会在 self 上被调用,那么为什么我们不能调用一个带有 self 本身的私有(private)方法?

抱歉,我并没有真正理解显式调用和隐式调用(有 self 和没有 self)的区别。

我知道我可能会被否决,但仍然想知道。谁能告诉我。

最佳答案

至少在 MRI 中,这些概念是相同的。显式调用公共(public)调用,隐式调用私有(private)调用。

解析器识别三种方法调用:

  1. 具有显式接收者的方法,例如obj.foo(1)
  2. 带有隐式接收者的方法,例如foo(1)
  3. 带有隐式接收者且没有参数的方法,例如foo

评估者将其中的每一个识别为不同的“调用类型”。这些类型(分别)是:

  1. CALL_PUBLIC
  2. CALL_FCALL
  3. CALL_VCALL

在调用电话之前检查此调用类型:

if (((noex & NOEX_MASK) & NOEX_PRIVATE) && scope == CALL_PUBLIC) {
return NOEX_PRIVATE;
}

即如果该方法是私有(private)的并且调用类型是公共(public)的,则不要调用该方法( protected 调用以相同的方式工作,但还要检查接收者的类)。

因此,只要有显式接收者(即使它是实例方法定义中的 self),该调用就是“公共(public)调用”。

关于ruby - 显式调用和隐式调用方法有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26911821/

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