我想使用value.respond_to?(:dup) ? value.dup : value
來檢查是否可以複製一個對象,但是在布爾值,無或類似的「原語」上使用TypeError
失敗。如何檢查變量是否真的響應__:dup?
我已經結束了:
begin
value = value.dup
rescue
#ignore, use the original if no dup-able (e.g nil, true, etc)
end
有沒有更好的辦法?
獎勵:它爲什麼迴應:dup
?
不深dup
,只是爲了這個問題。
編輯:思考:
obj.class.methods.include? :new
是好的,但有點太hackish的,我認爲它也有壞的表現Marshal
也貌似矯枉過正- 一行救援本來是最好的解決方案,但類型特定的一線救援目前是不可能的(IIUC matz is on that!),並且@JörgWMittag提到了它的錯誤。
- 我個人認爲
dup
被定義在對象級別是錯誤的。
所以,引用@Linuxios
確實沒有更好的辦法
什麼是Ruby版本使用的是?我在1.9.3上,而'value.respond_to?(:dup)'這裏的值是布爾值,向我返回'false'而不是'類型錯誤'。與nils和其他人類似。 – Nerve
@Nerve 1.9.3-p484 ... –
FWIW這方面有一個懸而未決的問題,但它沒有得到太多的關注:https://bugs.ruby-lang.org/issues/11929 –