Как я могу динамически добавить метод к классу Math в Ruby on Rails?

Я пытаюсь добавить в класс Math в Ruby on Rails следующий метод:

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'

Похоже, я упускаю из виду что-то очень простое.

Есть предположения?

Заранее спасибо за помощь.


person JP Richardson    schedule 07.01.2009    source источник


Ответы (3)


Math - это модуль, просто переименуйте класс в модуль.

person Pedro Henriques    schedule 07.01.2009

Вы можете поместить файл, содержащий этот код, в config / initializers, и он будет автоматически включен. ~ Просто к вашему сведению.

person Matt Darby    schedule 07.01.2009

Если вы используете instance_eval, вам не нужно беспокоиться о том, использовать ли class или module:

Math.instance_eval do
  def round_with_precision(number, precision)
    scalar = 10.0 ** precision
    (number * scalar).round / scalar
  end
end
person Zach Langley    schedule 09.01.2009