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

初めてのRuby − 3.2.5 型と自動変換(coerce規約と method_missing を使った四則演算)

coerce 規約

整数と浮動小数点数の演算は自動的に型変換されるが、処理系ハードコードによるものではなく、coerce規約というメカニズムに従うとのこと。

で、適当な自作クラスでの型変換を試してみる。 次のコードで作った coerce メソッドがそれ。 非常に簡単な例ですが。 ここではまた、method_missing を定義して、四則演算させてます。
#! ruby -Ks
class MyClass
  def initialize(value = 0)
    @value = value
  end
  def coerce(number)
    [number, @value]
  end
  def method_missing(name, *arg)
    case name
    when :+, :-, :*, :/, :**
      eval "#{@value} #{name} #{arg[0]}"
    else
      raise "#{name}"
    end
  end
end

v = MyClass.new(10)

puts "v と定数の演算", v + 5, v - 5, v * 10, v / 2, v ** 10
puts "定数と vの演算", 5 + v, 5 - v, 10 * v, 20 / v, 5 ** v