既存の演算子の再定義と既存クラスの継承

既存の演算子の再定義

Rubyでは一見演算子に見えて、メソッドとして定義されているものがある。

== === + - > <

これらはクラスごとに再定義可能である。どの演算子が再定義できる、できないかは公式ドキュメントで確認すること。

class User
  def ==(val)
     true
  end
end  

として、「==」を再定義してみる。

再定義前の動作

[56] pry(main)> User.last == User.first
=> false

再定義後の動作

[56] pry(main)> User.last == User.first
=> true

既存の組み込みクラスの継承

Stringクラス, Arrayクラスといった既存の組み込みライブラリのクラスであっても、継承して独自のクラスを作ることができる。

[74] pry(main)> class MyString < String
[74] pry(main)* end  
[77] pry(main)> MyString.new("sa")
=> "sa"
[78] pry(main)> s = MyString.new("sa")
=> "sa"
[83] pry(main)> s.class
=> MyString
[84] pry(main)> 
[85] pry(main)> class MyArray < Array
[85] pry(main)* end  
[86] pry(main)> a = MyArray.new()
=> []
[88] pry(main)> a
=> []
[91] pry(main)> a.class
=> MyArray
[92] pry(main)> a << 1
=> [1]
[93] pry(main)> a << 2
=> [1, 2]
[96] pry(main)> a
=> [1, 2]
[99] pry(main)> a.class
=> MyArray