Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以访问类ruby之外的受保护方法_Ruby - Fatal编程技术网

是否可以访问类ruby之外的受保护方法

是否可以访问类ruby之外的受保护方法,ruby,Ruby,我听说受保护的方法只能由继承的成员访问。但在ruby中,上述操作是可能的。代码正确吗?是的,代码正确。类的实例能够调用self方法,即使它们受到保护受保护/私有方法从外部隐藏,但从内部隐藏。方法机密仍受保护。您不能从类(或继承的类)之外调用它。但是你可以用self调用它,因为它与self仍然在同一个类中。self可以简化为self,因为self是隐式接收者。然而,如果secret是private一个人不能使用显式接收器,甚至self;你必须只写secret。“继承成员”是什么意思?此外,如果可能

我听说受保护的方法只能由继承的成员访问。但在ruby中,上述操作是可能的。代码正确吗?

是的,代码正确。类的实例能够调用self方法,即使它们受到
保护
<代码>受保护/私有方法从外部隐藏,但从内部隐藏。

方法
机密
仍受保护。您不能从类(或继承的类)之外调用它。但是你可以用self调用它,因为它与self仍然在同一个类中。self可以简化为self,因为self是隐式接收者。然而,如果
secret
private
一个人不能使用显式接收器,甚至
self
;你必须只写
secret
。“继承成员”是什么意思?此外,如果可能的话,这是一个正确的代码。“是否有可能在类之外访问受保护的方法”-您不能从类之外访问受保护的方法
secret
。您可以访问public方法
使用self说\u secret\u
。从类内调用受保护的方法。
class User    
  def say_secret_with_self
    self.secret
  end

  protected

  def secret
    "secret"
  end
end

u = User.new
p u.say_secret_with_self   # => "secret"