为什么Ruby不允许我将self指定为私有方法中的接收者?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么Ruby不允许我将self指定为私有方法中的接收者?相关的知识,希望对你有一定的参考价值。

Ruby是一种面向对象的语言。这意味着无论我发送什么消息,我都严格按照类的某个对象/实例发送它。

示例:

 class Test
   def test1
    puts "I am in test1. A public method"
    self.test2
   end

   def test2
    puts "I am in test2. A public Method"
   end
 end

我在test2对象上调用方法self很有道理>>

但是我不能这样做

  class Test
   def test1
    puts "I am in test1. A public method"
    self.test2 # Don't work
    test2 # works. (where is the object that I am calling this method on?)
   end

   private
   def test2
    puts "I am in test2. A private Method"
   end
 end

[当test2public method时,我可以在self上调用它(很公平,这是一种发送给self对象的方法)。但是当test2private method时,我无法自行调用。那么我要发送方法的对象在哪里?

Ruby是一种面向对象的语言。这意味着无论我发送什么消息,我都严格按照类的某些对象/实例发送它。示例:类Test def test1将“我在test1中。A...

答案

问题

另一答案

我要在其上发送方法的对象在哪里

另一答案

[self表示您所在的对象的当前实例。

另一答案

[在Ruby 2.7中已更改(2019年12月):self.foo()现在对私有方法foo也有效。

以上是关于为什么Ruby不允许我将self指定为私有方法中的接收者?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法从 Ruby 中的实例调用私有类方法?

Ruby - 托管私有 gem

Ruby 中的私有模块方法

如果我们将Optional.of方法设为私有,并且只允许Java中的Optional.ofNullable,该怎么办?除了向后兼容性会有什么问题吗?

C#:在实现的方法中显式指定接口

覆盖Java中的私有方法