kitak blog

Kみたいなエンジニアになりたいブログ

Rubyの==演算子を再定義する(ネタ)

こんなツイートをみかけた

f:id:kitak:20130106200308p:plain

実はRubyだとこれができてしまう

# coding: utf-8

class String
  alias_method :eql, :==

  def ==(other)
    return true if self.eql("おっぱい") && other.eql("えりっく")

    eql(other)
  end
end

puts "おっぱい" == "えりっく" # => true

ポイント

  • Rubyだと==は演算子であり,メソッドでもある."a" == "b"は"a".==("b")とも書ける
  • ==メソッドの中で==メソッドを呼び出すと再帰になり場合によっては無限ループになる.そのためModule#alias_methodをつかって再定義前の==メソッドをeqlメソッドとして退避している

最後に

色々とごめんなさいm(_ _)m