早期版本的Ruby puts Rational(5)
曾用于生成5
作为输出。使用Ruby 2.x它总是显示分母,即使它是1.它有没有办法修补Rational
类以恢复旧的行为?我知道我可以编写一个新功能,如
class Rational
def esthetic_to_s
denominator == 1 ? numerator.to_s : to_s
end
end
获得理想的行为
puts 5r.esthetic_to_s # => 5
puts 1.5r.esthetic_to_s # => 3/2
但我仍然必须明确地调用它。我宁愿能够说出
puts 5r # => 5
puts 1.5r # => 3/2
并按指示工作。
答案 0 :(得分:2)
您可以使用Rational#to_s
:
alias
class Rational
alias old_to_s to_s
def to_s
denominator == 1 ? numerator.to_s : old_to_s
end
end
答案 1 :(得分:1)
您可以优化Rational#to_s
以执行您想要的操作,而不会全局影响其行为:
module RationalRefinement
module PrettyToS
def to_s
if denominator == 1 then numerator.to_s else super end
end
end
refine Rational do
prepend PrettyToS
end
end
1.to_r.to_s
# => '1/1'
using RationalRefinement
1.to_r.to_s
# => '1'
module RefinementsAreLexicallyScopedNotGlobal
puts 1.to_r
# 1/1
end