true 1.clone # => TypeError: can't clone Fixnum -6ren">
gpt4 book ai didi

ruby - 对象可以 `respond_to` 消息但在调用时引发错误?

转载 作者:太空宇宙 更新时间:2023-11-03 18:10:49 24 4
gpt4 key购买 nike

我试过:

1.respond_to? "clone"    # => true
1.clone # => TypeError: can't clone Fixnum

似乎一个对象可以报告它接受了一条消息,但实际上引发了一个异常。

我正在尝试编写一个deep_copy。是否有内置的或者一些代码片段已经可以做到这一点?如果我需要确定某些东西是否可以克隆,我是否需要以任何方式调用它,然后从异常中拯救以知道它不是?

如果对象将引发异常,那么 (1) 报告 false 是否有意义,或者是由于 Object 提出的接口(interface)要求, (2) 我真的可以告诉任何对象向 respond_to "foo" 报告错误吗?

最佳答案

根据 Jordan 的相关评论创建社区维基答案

Fixnum 响应clone,因此 1.respond_to?(:clone) 返回 true< 是有意义的

考虑一下,如果你写了一个带有方法的类

def foo
raise "Error!"
end

您是否希望该类的实例为 respond_to(:foo) 返回 true。答案是"is"。

它是否引发错误并不重要。如果它引发了一个没有意义的 NoMethodError,但这里不是这种情况。

关于ruby - 对象可以 `respond_to` 消息但在调用时引发错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34573872/

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