1

我想用逗号在我的 rails 应用程序中打印数字。根据这里的答案,我可以包装我打印的每一个数字

number_with_delimiter(@number, :delimiter => ',')

但是,我不想进入我的视图并手动应用它。我宁愿覆盖整数的打印方式。

在 java/jsp 中,<%= %> 标签内的任何内容都会被toString()调用以评估页面上打印的内容,因此我认为覆盖该类的to_s方法Integer可以:

class Integer
  def to_s
    number_with_delimiter(self, :delimiter => ',')
  end
end

不幸的是,这不起作用,因为使用<%=%>标签打印的数字不会以逗号出现。(不会引发错误。)

我怎样才能做到这一点?<%=%>块不会自动调用to_s给定对象的方法吗?它如何评估要打印的内容?

4

1 回答 1

0

你在修补错误的东西,你想修补Fixnum. 例如:

>> class Fixnum
>>   def to_s
>>     'pancakes'
>>     end
>>   end
=> nil
>> 1.to_s
=> "pancakes"

对于 ERB:

>> ERB.new('<%= 11 %>').result
=> "pancakes"

也就是说,你的捷径(就像大多数捷径一样)最终可能会在其他地方给你带来各种新的和有趣的问题。您最终将发送'1,000'到期望的东西(例如数据库或客户端 JavaScript 或...),'1000'并且您会得到一个令人困惑的嘶嘶声,适合您的工作。您还必须担心其他数字类,例如FloatBignum

修正你的观点,不要纠缠于你自己的懒惰。

于 2012-10-25T03:04:03.817 回答