我有下面的代碼:ruby中的宇宙飛船<=>運算符如何拋出異常?
def sort_descending _objects, field
_objects.sort { |b,a| a.send(field) <=> b.send(field) }
end
當a.send(field)
返回String
和b.send(field)
返回一個Integer
,那麼ArgumentError
被拋出。我試圖抓住這個異常是:
def sort_descending _objects, field
_objects.sort { |b,a| safe_compare(a,b,field) }
end
def safe_compare a, b, field
a.send(field) <=> b.send(field)
rescue
a.send(field).to_s <=> b.send(field).to_s
end
,但這也會引發ArgumentError
。我不知道爲什麼。任何人都可以解釋排序引發的異常行爲嗎?
雖然這種解決方法的工作原理,它看起來醜陋
def sort_ascending _objects, field
_objects.sort do |a,b|
safe_compare(a,field,b) <=> safe_compare(b,field,a)
end
end
def safe_compare a, field, b
_a,_b = a.send(field), b.send(field)
_a.class == _b.class ? _a : _a.to_s
end
代碼來重現是here。
的原因'ArgumentError'沒有被捕獲在此說明:http://stackoverflow.com/questions/10692860/ruby-ignores-rescue-辯論錯誤 – lurker
重現問題的代碼應該包含在問題中,並且是簡短的摘要,而不是其他地方的鏈接。你要求我們追逐頁面來幫助你。見http://sscce.org/ –
@TheTinMan哦,對不起。我保證會變得更好。儘管我的帳戶年齡稍大,但我只是開始積極使用它。 – Nockenfell