Ruby で (a ==1 && a== 2 && a==3) の結果を真にする
と、いうのが 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 たのしい