1

Ruby で Rational をコンソール アプリケーションに使用することに決めたが、それらを分数として表示したくない場合、それらを 10 進表記で表示するように指定する慣用的な方法はありますか?

私が知っているオプションは次のとおりです。

 fraction = Rational(1, 2)
 puts "Use to_f: #{fraction.to_f}"
 puts(sprintf("Use sprintf %f", fraction))
 class Rational
   def to_s
     to_f.to_s
   end
 end
 puts "Monkey patch Rational#to_s: #{fraction}"

代替手段はありますか?

4

1 に答える 1

5

sprintfで使用%gして、「正しい」精度を得ることができます。

puts "%g" % Rational(1,2)
#=> 0.5

私はあなたが持っているように個人的にモンキーパッチを合理的にしたいと思いますが、それなら私はモンキーパッチのファンです。組み込みの動作をオーバーライドするto_sことは、コンソールアプリケーションには完全に適切であるように思われます。

Object#to_consoleおそらく、呼び出しを定義する独自のコンソールを作成し、代わりto_sに独自のモンキーパッチを適用する別の方法がありますRational#to_console。その余分な努力はRational#to_s、パッチで壊れるような方法でいくつかのライブラリがすでに使用している0.1%の可能性に対してより安全になります。

于 2011-03-31T22:10:21.093 に答える