我在一些看似基本的事情上遇到了麻烦。基本上我想做这样的事情:
result = reports.map do |rep|
rep.calculate_distance
break if rep.msg_code == 5
end
但不是返回这样的东西:
=> [#<BigDecimal:7fc7036c63b8,'0.3962736920 816792E7',18(45)>, #<BigDecimal:7fc7066061c8,'0.1603401548 194003E4',27(45)>, #<BigDecimal:7fc70601fb60,'0.1707572852 613187E3',27(45)>, #<BigDecimal:7fc706176220,'0.4645528504 455211E3',27(45)>, #<BigDecimal:7fc70667e448,'0.1058402703 80584E4',27(45)>]
它返回这个:
=> [nil, nil, nil, nil, nil]
那么我试试这个:
reports.take_while {|rep| rep.msg_code == 5 }.map(&:calculate_distance)
但它给了我这个:
=> []
而且我知道事实上没有一个味精代码等于 5,所以它应该返回数组中的大小数,但事实并非如此。
那么如何让 take_while 使用 map 以获得所需的结果呢?