Ruby 关于私有方法调用的问题

2604249649 · 2023年02月23日 · 最后由 2604249649 回复于 2023年02月23日 · 341 次阅读

我最近重新再看《Ruby 元编程(第二版)》,在 2.4 节有如下说明:

私有方法服从一条简单的规则:不能明确指定接收者来调用私有方法。换而言之,私有方法只能通过隐性的接收者 self 调用

然后还举了一个例子

class C
  def public_method
    self.private_method
  end

  private
  def private_method; end
end

C.new.public_method

然后又有如下说明:

如果去掉 self 关键字,代码就可以正常运行了。这个例子说明私有方法同时遵循两条规则:首先,如果调用方法的接收者不是自己,就必须明确指明接收者;其次,私有方法只能通过隐性接收者调用。根据这两条规则,你只能在自身中调用私有方法。这条规则称为私有规则

我的疑惑如下:

1.我在 Ruby3 的环境下试了一下例子,貌似加不加 self 都没报错,可以调用,Ruby3 是对这块做了改动么?

2.还有就是如果按照 Ruby2 的版本来理解,我还是不太明白书上说的意思:前面说私有方法的调用不能明确指定接收者来调用,后面又说如果调用方法的接收者不是自己,就必须明确指定接收者,而且私有方法只能通过隐性的接收者调用。

我感觉有点懵了,有大佬能有更简明的说法或者更直白的示例么?

补充:我在 replit 用 ruby2.7 试了一下,也没报错 replit上的截图

需要 登录 后方可回复, 如果你还没有账号请 注册新账号