如何检查Ruby中是否定义了私有方法 [英] How to check if private method is defined in ruby
本文介绍了如何检查Ruby中是否定义了私有方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我能找到的最接近的是Ruby,如何检查方法"foo =()"是否有效?,但仅在方法是公共方法时才有效,即使在类块中也是如此.
The closest I can find is In Ruby, how do I check if method "foo=()" is defined?, but it only works if the method is public, even when inside the class block.
我想要什么:
class Foo
private
def bar
"bar"
end
magic_private_method_defined_test_method :bar #=> true
end
我尝试过的事情:
class Foo
private
def bar
"bar"
end
respond_to? :bar #=> false
#this actually calls respond_to on the class, and so respond_to :superclass gives true
defined? :bar #=> nil
instance_methods.include?(:bar) #=> false
methods.include?(:bar) #=> false
method_defined?(:bar) #=> false
def bar
"redefined!"
end # redefining doesn't cause an error or anything
public
def bar
"redefined publicly!"
end #causes no error, behaves no differently whether or not #bar had been defined previously
end
推荐答案
You want Module#private_method_defined?
.
class Foo
def do_stuff_if_bar_is_defined
if self.class.private_method_defined?(:bar)
do_stuff
end
end
private
def bar
"bar"
end
private_method_defined? :bar #=> true
end
Foo.private_method_defined? :bar #=> true
这篇关于如何检查Ruby中是否定义了私有方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文