如果我决定将 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}"
还有其他选择吗?
最佳答案
您可以在 sprintf 中使用 %g
来获得“正确”的精度:
puts "%g" % Rational(1,2)
#=> 0.5
我个人会像您一样使用 monkey patch rational,但我是 monkey patching 的粉丝。覆盖内置的 to_s
行为似乎完全适合控制台应用程序。
也许你有另一种选择,你可以编写自己的控制台,定义 Object#to_console
来调用 to_s
,然后你可以在你自己的 Rational 中打补丁#to_console
代替。这种额外的努力将使它更安全,因为有 0.1% 的可能性某些库正在使用 Rational#to_s
已经以一种会破坏您的补丁的方式。
关于ruby - 我应该如何指定 Rationals 应该在 Ruby 中以十进制表示法显示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5494551/