0

一見基本的なことで問題が発生しています。基本的に私はこのようなことをしたいです:

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を取得するにはどうすればよいですか?

4

1 に答える 1

3

railsオブジェクトのmsg_codeメソッドが5に等しくなるまでそれを続けたい

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

基本的に、述語では!= 5なく。== 5take_while

于 2013-03-13T20:46:00.637 に答える