可能重复:
在 Ruby 中有没有办法重载初始化构造函数?
BigDecimal
不像初始值那样采用浮点数,所以我正在编写一个构造函数来处理它。它似乎忽略了初始化方法并调用了默认构造函数。
它抛出TypeError can't convert Float into String (TypeError)
该方法format
确实有效。
文件 BigDecimal.rb:
require 'bigdecimal'
class BigDecimal
def initialize
if self.class == Float
super self.to_s
end
end
def format
sprintf("%.2f", self)
end
end
然后,在文件 test.rb 中:
require 'BigDecimal' # => true
bd = BigDecimal.new('54.4477') # works
puts bd.format # 54.44
bd2 = BigDecimal.new(34.343) # TypeError: can't convert Float into String (TypeError)
红宝石 1.9.2