既存の演算子の再定義と既存クラスの継承
既存の演算子の再定義
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