所以,使用ruby中的所有元编程内容(使用1.9.3),我猜有一种方法可以返回当前的可见性。
让我们假设它被称为visibility
。
class Foo
puts visibility
# => "public"
private
puts visibility
# => "private"
end
那么,什么是visibility
- 如何找到ruby解释器在找到新方法定义时使用的当前可见性?
答案 0 :(得分:1)
AFAIK,没有一种随时可用的方法。但是,你可以用(未经测试的)
的方式实现一个class Class
def visibility
define_method(:__visibility_discovery__) { }
visibility =
if protected_method_defined? :__visibility_discovery__
"protected"
elsif private_method_defined? :__visibility_discovery__
"private"
else
"public"
end
remove_method :__visibility_discovery__
end
end
答案 1 :(得分:0)
在Ruby中,对于实例方法,您有三种不同的可见性级别。
方法默认为public
,这是您可能习惯的。如果您有权访问该对象,则始终可以访问此方法。
private
和protected
相似。它们只能由类和子类访问。不同之处在于无法使用显式接收器调用public
方法。这意味着你不能从同一个类的另一个实例调用另一个方法的private
函数,而protected
可以。{/ p>
因此,如果您需要在课堂外使用方法,请坚持public
的默认可见性。如果您的方法需要由该类的任何实例访问,例如某些自定义比较逻辑,请使用protected
。如果您的方法是在该类的实例之外不可见的任何内容,请使用private
。
要真实回答您的问题,visbility
是一种返回当前可见状态的方法 - 无论是public
,private
还是protected
。