読者です 読者をやめる 読者になる 読者になる

みんなのちからになりたい

コピペでブログラムつくっていきたい

rubyの演算子を再定義するとFloatがなんか変

ruby演算子もメソッドだということなので、試しに再定義してみた。

class Float
  ['+', '-', '*', '/'].each do |num|
    define_method(num) do |other|
      "UMAIBOU"
    end
  end
end

p 1.0 + 1.0
p 1.0 - 1.0
p 1.0 * 1.0
p 1.0 / 1.0


$ ruby test.rb
"UMAIBOU"
0.0
"UMAIBOU"
"UMAIBOU"

できた。
でもマイナスだけできてない。謎すぎる。
マイナスはFloatではないのか。

class Float
  ['+', '-', '*', '/'].each do |num|
    define_method(num) do |other|
      "UMAIBOU"
    end
  end
end

p 1.0 + 1.0
p 1.0 - 1.0
p 1.0 * 1.0
p 1.0 / 1.0
p 1.0.class
a = 1.0 - 1.0
p a.class


$ ruby test.rb
"UMAIBOU"
0.0
"UMAIBOU"
"UMAIBOU"
Float
Float

Floatである。
ためしにFixnumもやってみる。

class Float
  ['+', '-', '*', '/'].each do |num|
    define_method(num) do |other|
      "UMAIBOU"
    end
  end
end
class Fixnum
  ['+', '-', '*', '/', '%'].each do |num|
    define_method(num) do |other|
      "UMAIBOU2"
    end
  end
end

p 1.0 + 1.0
p 1.0 - 1.0
p 1.0 * 1.0
p 1.0 / 1.0
p 1.0.class
a = 1.0 - 1.0
p a.class
p 1 + 1
p 1 - 1
p 1 * 1
p 1 / 1


$ ruby test.rb
"UMAIBOU"
"UMAIBOU"
"UMAIBOU"
"UMAIBOU"
Float
String
"UMAIBOU2"
"UMAIBOU2"
"UMAIBOU2"
"UMAIBOU2"

どういうことなのか。
まったくわからない。