我有以下代码:
def sort_descending _objects, field
_objects.sort { |b,a| a.send(field) <=> b.send(field) }
end
当a.send(field)
返回 aString
并b.send(field)
返回 anInteger
时,ArgumentError
抛出 an。我试图通过以下方式捕获此异常:
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
重现代码在这里。