概要
Comparable
詳細
Comparableモジュールはオブジェクトの比較を許容するためのmixinです。
このモジュールは<=>メソッドに依存し、該当メソッドは
レシーバーと比較オブジェクトの比較結果が下記の結果を返却するように実装します。
大小関係 | 結果 |
---|---|
レシーバーが小さい | -1 |
レシーバーと等しい | 0 |
レシーバーが大きい | 1 |
サンプル
仕様
成績を表すGradeクラスを作成。
成績は良い順にA,B,Cとする。
コード
# encoding: utf-8 require "pp" class Grade include Comparable GRADES = [:C, :B, :A] attr_accessor :grade def initialize(grade) @grade = grade end def <=>(other) _grade = other.grade raise "invalid grade" unless GRADES.include? _grade GRADES.index(@grade) <=> GRADES.index(_grade) end end grade_a = Grade.new(:A) grade_b = Grade.new(:B) grade_c = Grade.new(:C) grade_a2 = Grade.new(:A) p grade_a == grade_b p grade_a > grade_b p grade_a > grade_a2 p grade_a >= grade_b p grade_a >= grade_a2 p grade_a < grade_b p grade_a <= grade_b p grade_b.between? grade_c, grade_a p grade_b.between? grade_b, grade_a p grade_a.between? grade_c, grade_b
出力
false true false true true false false true true false