Ruby 定义#clone
in Object。
令我惊讶的是,有些类在调用它时会引发异常。
我发现NilClass, 真实课堂, 假类, Fixnum有这种行为。
1)是否存在完整的类列表(至少是核心类),这不允许#clone
?
或者有没有办法检测特定类是否支持#clone
?
2)出了什么问题42.clone
?
我认为没有正式的列表,至少除非您阅读源代码。 2) 不起作用的原因是因为对 Fixnums 进行了优化。它们作为实际值(true、false 和 nil 也是如此)在内部存储/传递,而不是作为指针。天真的解决方案就是42.clone
返回相同的42
,但随后不变式obj.clone.object_id != obj.object_id
将不再持有,42.clone
实际上不会是克隆。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)