ruby - 为什么我无法从类内访问私有(private)函数?

标签 ruby oop private

以下代码打印 NoMethodError。我不明白原因。虽然我调用的方法是私有(private)的,但我是从类内部调用它的。类 var 不能访问它的私有(private)变量/函数吗?我可以用 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)

最佳答案

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

如果您确实想调用私有(private)方法,则始终可以使用object.send(:func_pri)

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

关于ruby - 为什么我无法从类内访问私有(private)函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11027945/

相关文章:

ruby - 从 url 读取并写入 Tempfile

javascript - 我应该如何在小函数之间传递数据 - 通过闭包或通过对象的属性?

ruby - 从另一个私有(private)方法中使用 self.xxx() 调用私有(private)方法 xxx,导致错误 "private method ` xxx' called”

oop - 在这个简单的MVC场景中,我应该把这种逻辑放在哪里?

java - java OOP 中没有构造函数的后果

java - 我如何能够在类中引用实例的私有(private)字段?

C++:私有(private)方法返回的本地 typedef

ruby-on-rails - 在一个模型上创建多个条目 - Ruby on Rails(非嵌套)

ruby-on-rails - Rails has_many 没有 belongs_to

ruby - 在 Ruby 中编写 "matching balanced parenthesis"程序的更好方法