如果我想检查是否定义了具有给定名称的方法,最好使用respond_to?
或defined?
?
从效率的角度来看,使用defined?
可能存在争议,因为defined?
是内置关键字,而respond_to?
是一种方法,因此前者可能会更快。但另一方面,在已知要检查的表达式是一种简单方法的情况下,defined?
需要解析整个表达式,与使用respond_to?
相比,这可能是一个缺点,后者只需要接受参数即可。作为方法名称。
哪个更好?除了效率,还有其他要考虑的方面吗?
最佳答案
If I want to check whether a method with a given name is defined, which is better to use,
respond_to?
, ordefined?
?
两者都不。使用
Module#method_defined?
并不是真正使用“更好”的问题:
Object#respond_to?
方法或defined?
一元前缀运算符(尽管有名称!)都不会检查方法是否是定义的:它们都检查接收方是否响应一条消息,这是完全不同的事情。实际上,只有
Module#method_defined?
会检查该方法是否已定义:class Foo
def method_missing(*) end
def respond_to_missing?(*) true end
end
foo = Foo.new
defined? foo.bar
#=> 'method'
foo.respond_to?(:bar)
#=> true
Foo.method_defined?(:bar)
#=> false
关于ruby - “respond_to ?' versus '定义了吗?”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44107544/