Ответ, который вы сами разместили, фактически меняет Fixnum
глобально, что не то, что вы хотите. То есть, с решением:
module Magic
class ::Fixnum
def div2(other)
self.to_f/other
end
alias :"/" :div2
end
end
# Yields 0.25 instead of expected 0.
# This line should not be affected by your Fixnum change, but is.
1/4
Для случая использования вы описываете, Ruby 2.0 введен refinements, который вы можете использовать, как показано ниже. Обратите внимание, что using
Модуль внутри другого модуля невозможен в Ruby 2.0, но находится в Ruby 2.1. Поэтому для использования модуля Magic
внутри SomeModule
вам понадобится Ruby 2.1. Это может быть проблемой, если вы используете Windows, так как вам придется самому скомпилировать 2.1, двоичные файлы Windows и установщик все еще находятся на уровне 2.0.
module Magic
refine Fixnum do
def /(other)
self.to_f/other
end
end
end
1/4 # => 0
using Magic
1/4 # => 0.25
Подробно: 'self.to_f' в порядке, но' to_f' достаточно. –