2013-12-10 3 views
6

Переосмысление Float#/, кажется, не имеют никакого эффекта:обезьяны заплат Float Infix оператора Производит Неожиданные результаты

class Float 
    def /(other) 
    "magic!" 
    end 
end 
puts 10.0/2.0 # => 5.0 

Но когда другой инфикс оператор Float#* переопределяется, Float#/ вдруг принимает новое определение:

class Float 
    def /(other) 
    "magic!" 
    end 
    def *(other) 
    "spooky" 
    end 
end 
puts 10.0/2.0 # => "magic!" 

Я хотел бы услышать, сможет ли кто-нибудь объяснить источник этого поведения, и если кто-то другой получит те же результаты.

  • Ruby: рубин 2.0.0p353 (2013-11-22) [x64-mingw32]

Чтобы быстро подтвердить ошибку, запустите this script.

+1

подтвержден на Ubuntu 13.04 с Рубином 2.0.0p247. Возможно, это будет указано как ошибка? [Ruby Issue Tracker] (https://bugs.ruby-lang.org/) – screenmutt

+0

Для меня оба дают '' магия ''вывод ... Я на' kirti @ kirti-Aspire-5733Z: ~ $ ruby ​​- v ruby ​​2.0.0p0 (2013-02-24 версия 39474) [i686-linux] kirti @ kirti-Aspire-5733Z: ~ $ ' –

+0

Получил тот же результат на Mac/MRI Ruby 2.0.0 –

ответ

3

Это, кажется, ошибка в реализации Ruby. Сообщение об ошибке было отправлено here.

В то же время вы можете либо переключать реализации, либо варианты переключения. 1.8.7 похоже на ошибку.

РЕДАКТИРОВАТЬ

This bug фиксировали revision 44127

+0

В чем заключается ваша заявка на то, что 2.1 является ошибкой? – sawa

+0

@sawa IRB был без ошибок в 2.1 для меня, но когда я запускал его как скрипт, там была ошибка. – screenmutt

+1

Yup :-) Смазливая ошибка! (и фиксированный ...) –

Смежные вопросы