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メソッドが上書きされるようです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA