ruby - 使用take_while和map iterator

时间:2013-03-13 20:41:07

标签: ruby-on-rails ruby

我遇到了一些看似基本的问题。基本上我想做这样的事情:

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)

但它给了我这个:

 => [] 

我知道事实上没有一个msg代码等于5,所以它应该返回一个数组中的大小数,但它没有。

那么如何使用take_while来处理map以获得所需的结果?

1 个答案:

答案 0 :(得分:3)

  

我想继续这样做,直到rails对象的msg_code方法等于5

reports.take_while{ |rep| rep.msg_code != 5 }.map(&:calculate_distance)

!= 5谓语中基本上== 5代替take_while