【发布时间】:2011-10-21 13:21:59
【问题描述】:
假设你有一个跑步者数组:
runners = [al, betty, chris, debby]
你有一个方法time 可以返回跑步者在比赛中的时间。
如果time 方法总是返回一个浮点数,我知道您可以使用sort_by 对跑步者进行排序,如下所示:
runners.sort_by do |runner|
runner.time
end
但是,假设time 有时会返回一个字符串,例如"disqualified"。在那种情况下,你将如何按时间对跑步者进行排序,不合格的跑步者排在最后?如果您希望被取消资格的跑步者首先或其他位置怎么办?
【问题讨论】:
-
我建议您不要用字符串超载您的预期时间值。相反,请使用单独的
is_disqualified?true/false属性并让时间值始终是浮点数,或者更好的时间对象。当我们使用意想不到的类型时,逻辑可能会变得非常复杂,当您必须重新访问代码并重新了解为什么以某种方式做事时,这将造成更大的损失。 -
@the Tin Man:这不是Java,函数名应该是
disqualified?,而不是is_disqualified?。 :-) -
实际上,我是用 ActiveRecord 的术语来思考的。
-
@the Tin Man:我认为 ActiveRecord 也没有在布尔 getter 前使用
is_的先例。 -
我投票取消这个问题的资格,因为它可能与Sort a collection of objects by number (highest first) then by letter (alphabetical) 重复(也是运动主题!)。