小编San*_*ede的帖子

为什么 self.method_name 无法访问私有方法?其中只有 private method_name 可以在任何方法中访问 ruby​​ 中的私有方法

class Person
  def one
    @var = 99
    self.two
  end
  private
  def two
    p @var
  end
end
p=Person.new
p.one
Run Code Online (Sandbox Code Playgroud)

当我运行此代码时,我收到错误 main.rb:4:in one': private method Two' Called for #<Person:0x00000000965a28 @var=99> (NoMethodError)
from main.rb:12:in `'

class Person
  def one
    @var = 99
    two
  end
  private
  def two
    p @var
  end
end
p=Person.new
p.one
Run Code Online (Sandbox Code Playgroud)

当我运行这个时,我得到的输出为 99。因此,当 p.one 调用时,它会转到方法一,当它找到没有任何接收者对象的方法二时执行它(这意味着方法二将 self 作为对象)并且成功执行该方法。

但是当我手动给出 self.two 时,它给了我错误,为什么?

两个 VS self.two 的方法调用有什么区别?

ruby

2
推荐指数
1
解决办法
636
查看次数

标签 统计

ruby ×1