【问题标题】:How can I dynamically add a method to the Math class in Ruby on Rails?如何在 Ruby on Rails 中动态地将方法添加到 Math 类?
【发布时间】:2010-09-30 03:25:59
【问题描述】:

我正在尝试将以下方法添加到 Ruby on Rails 中的 Math 类:

class Math
  def self.round_with_precision(number, precision)
    scalar = 10.0 ** precision
    number = number * scalar
    number = number.round
    number = number / scalar
    return number;
  end
end

然后我将以下内容添加到我的 environment.rb 中:

require 'lib/math'

当我打开 Rails 控制台时,我收到以下错误:'./lib/math.rb:2:TypeError Math is not a class'

似乎我忽略了一些非常简单的事情。

有什么想法吗?

提前感谢您的帮助。

【问题讨论】:

    标签: ruby-on-rails ruby metaprogramming introspection


    【解决方案1】:

    数学是一个模块,只需将类重命名为模块即可。

    【讨论】:

      【解决方案2】:

      您可以将包含此代码的文件放在 config/initializers 中,它将自动包含在内。 ~ 仅供参考。

      【讨论】:

        【解决方案3】:

        如果你使用instance_eval,你不必担心是使用class还是module

        Math.instance_eval do
          def round_with_precision(number, precision)
            scalar = 10.0 ** precision
            (number * scalar).round / scalar
          end
        end
        

        【讨论】:

          猜你喜欢
          • 2021-12-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多