在以下代码中,due_date
和position
是可选字段,而important
是一个始终设置为true
或{{1}的字段}。
false
我正在试图找出多种排序的工作原理。如果存在posts.sort_by do |post|
[post.due_date || 0, post.position || 0, post.important? ? 0 : 1]
end
,则它优先或将其设置为零。为什么我们在这里将它设置为零?
答案 0 :(得分:1)
这里的问题没有特别关于多重比较。如果比较数组,每个元素将与另一个数组中的相应元素进行比较。如果这些值有时取数值,那么它们总是必须是数字。数字无法与nil
进行比较,这样做会引发错误。将它们默认为零是为了确保它们是数字。只要将它们默认为数字,就不会引发错误。零的特定选择取决于您希望使用缺失值定位条目的位置;你可以选择无穷大,负无穷大等来获得不同的结果。