【发布时间】:2014-02-11 11:51:12
【问题描述】:
所以我正在编写一些代码来计算多段旅程中各种公共交通票选项的成本。这归结为计算每个段(地图)的成本并将它们相加(减少也称为注入),这很简单:
total = journey.map {|segment| compute segment}.reduce(:+)
问题是,有时compute 返回nil,因为该段对于给定的工单是不可能的,然后求和操作就会失败。在这种情况下,我想返回 nil,因为单个坏段意味着整个旅程无效。目前我正在这样做:
fares = journey.map {|segment| compute segment}
total = if fares.include? nil
nil
else
fares.reduce(:+)
end
我也可以写得简洁但(恕我直言)可读性较差:
fares = journey.map {|segment| compute segment}
total = fares.reduce{|sum, n| (sum.nil? or n.nil?) ? nil : sum + n}
但是必须有更好的方法,对吧...?
【问题讨论】: