地方でリモートワーク in Iwate

東京の受託開発会社でリモートワークしてます。

Rubyは演算子を再定義可能

スポンサーリンク
class Employee
  attr_reader :id
  attr_accessor :name
  def initialize(id,name)
    @id = id
    @name = name
  end
  def to_s
    return "#{@id}:#{@name}"
  end
  def <=> other
    return self.id <=> other.id
  end
end

Ruby silverの問題集の中にこんな問題がありました。 疑問に思ったのは、def <=> otherの部分です。 なんでメソッドに演算子が来ているのか?

Rubyは演算子もメソッド

Rubyは演算子もメソッドで、再定義が可能であるということ。

つまり+も演算子であるが、メソッドでもあるということ。

# シンタックスシュガー
1 + 2 #=>  3
1.+(2) # => 3

123 + 456
123.+(456) # => 579
  • 演算子も演算子のように呼び出せるだけで、メソッドのように.でつなげて呼び出すことができます。 むしろ、1 + 2のように.がなくても呼び出せるというほうが正しい?

またto_sのメソッドを再定義すると、putsメソッドが上書きされるようです。