And*_*imm 1 ruby rational-number view
如果我决定在Ruby中使用Rationals作为控制台应用程序,但不希望它们显示为分数,是否有一种惯用的方式来指定它们应以十进制表示法显示?
我知道的选项包括:
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}"
Run Code Online (Sandbox Code Playgroud)
还有其他选择吗?
您可以%g在sprintf中使用以获得"正确"的精度:
puts "%g" % Rational(1,2)
#=> 0.5
Run Code Online (Sandbox Code Playgroud)
我个人认为你有理性的补丁,但后来我是猴子补丁的粉丝.覆盖内置to_s行为似乎完全适合控制台应用程序.
也许你有另一个选择,你可以编写自己的控制台来定义Object#to_console调用to_s,然后你可以自己修改补丁Rational#to_console.额外的努力会使某些库Rational#to_s已经以一种会破坏你的补丁的方式使用0.1%的几率更安全.