gpt4 book ai didi

ruby - “respond_to ?' versus '定义了吗?”

转载 作者:行者123 更新时间:2023-12-03 16:45:13 24 4
gpt4 key购买 nike

如果我想检查是否定义了具有给定名称的方法,最好使用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?, or defined??



两者都不。使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com