【问题标题】:why can't i access the private function from within the class?为什么我不能从类中访问私有函数?
【发布时间】:2012-06-17 04:22:07
【问题描述】:

以下代码打印NoMethodError。我不明白原因。虽然我调用的方法是私有的,但我是从类中调用它。类 var 不能访问它的私有变量/函数吗?我可以在 Java 中做到这一点。

class Tester
 private
   def func_pri
     puts("From a private function")
   end

 protected 
  def func_prot
    puts("From a protected function")
  end

 public
  def func_pub
     puts("From a public function")
  end

 public
  def caller(object)
    object.func_pub
    object.func_pri # This statement causes error
    object.func_prot
  end
 end

 o = Tester.new
 o.caller(o)

【问题讨论】:

  • 当您使用对象作为参数时,您是从范围之外调用此方法。使用 send,或者在调用者方法中,做 self.fun_pri
  • 这是什么语言(哦,是红宝石)?为什么将 传递给 函数? 认为它调用了它不能调用的其他

标签: ruby oop private


【解决方案1】:

您不能在对象上调用私有方法,甚至在 self 上也不能。删除object. 部分,然后调用将继续self

如果你确实想调用私有方法,你可以随时使用object.send(:func_pri)

在这些方面,Ruby 与 Java 等语言完全不同。有关更多信息,您可能需要查看http://www.ruby-doc.org/docs/ProgrammingRuby/,“类、对象和变量”一章,“访问控制”部分

【讨论】:

  • 类似于java中的this。当您没有为方法指定接收者时,它会转而使用 self(即 self 是隐式接收者)
猜你喜欢
  • 2021-11-01
  • 2020-08-01
  • 2012-09-24
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多