Rubyでオーバーロード?

by tanabe on March 01, 2006

kind_of?を見て、Rubyでオーバーロードならこの方がそれっぽく見えるかと思いました。

class Integer
  def exclaim
    v = 1
    self.downto(1) { |n| v *= n }
    v
  end
end

class String
  def exclaim
    self+"!"
  end
end

i = 10
s = "10"

class Sample
  def Sample::exclaim(o)
    o.exclaim
  end
end

[i, s].each { |o| p Sample::exclaim(o) }
# => 3628800
# => "10!"

king_of?関係ないし。StringとかIntegerに直接定義すなってかんじですが。なにより釈迦に説法ですね。失礼しました。

「へー、こんなふうに勉強されるんだなー」ととても興味深く読んでいます。今後も楽しみにしています。