と、いうのが JavaScript 界隈で流行っているので Ruby でもやってみた
== メソッドを定義する
多分一番簡単なやり方。 比較演算子そのものの結果を変えます。
a = Object.new def a.== other true end p a == 1 && a == 2 && a == 3 # => true
a メソッドを定義する
Ruby ではメソッド呼び出しの際に () を省略する事が出来るので a() というメソッド呼び出しを a とだけで呼び出すことが出来ます。
def a @a = (@a || 0) + 1 end p a == 1 && a == 2 && a == 3 # => true
こっちは Ruby らしいですね。
おまけ:== ではなくて === を使う
主題からは外れますが Ruby では === 演算子は特別な呼び出しなので == の変わりに === を使うといろいろな手段が使えます。
Proc#=== を使う
Proc#=== は Proc#call と同じなのでブロックの中身をそのまま返します。
a = proc { true } # a.call 1 と同じ p a === 1 && a === 2 && a === 3 # => true
Method#=== を使う
Method#=== も Proc#=== と同様に #call を呼び出します。
a = [1, 2, 3].method(:include?) # [1, 2, 3].include? 1 を呼び出しているのと同じ p a === 1 && a === 2 && a === 3 # => true
Range#=== を使う
Range#=== は Range#include? を呼び出します。
a = (1..3) # (1..3).include? 1 を呼び出しているのと同じ p a === 1 && a === 2 && a === 3 # => true
Set#=== を使う
Range と同様に Set#=== も Set#include? を呼び出します。
require "set" a = Set[1, 2, 3] # Set[1, 2, 3].include? 1 を呼び出しているのと同じ p a === 1 && a === 2 && a === 3 # => true
Ruby たのしい