我能找到的最接近的是在Ruby中,如何检查方法"foo =()"是否已定义?,但只有当方法是公共的时,它才有效,即使在类块内.
我想要的是:
class Foo
private
def bar
"bar"
end
magic_private_method_defined_test_method :bar #=> true
end
Run Code Online (Sandbox Code Playgroud)
我尝试过的:
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
Run Code Online (Sandbox Code Playgroud)
elq*_*sta 33
另一种方法是使用:respond_to?,例如
self.respond_to?(:bar, true)
Run Code Online (Sandbox Code Playgroud)
请注意,第二个参数在这里很重要 - 它表示:respond_to?应查找所有范围方法,包括私有方法.
She*_*acu 11
你想要的.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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3694 次 |
| 最近记录: |