オペレーターは<=>ブール値をうまく処理しません。
true <=> true # => 0
true <=> false # => nil
この動作は設計によるものですか、それとも何かが足りないのですか?私が期待する:
true <=> false # => 1
false <=> true # => -1
編集 これは私が探していたものです:
false.to_i <=> true.to_i # => -1
オペレーターは<=>ブール値をうまく処理しません。
true <=> true # => 0
true <=> false # => nil
この動作は設計によるものですか、それとも何かが足りないのですか?私が期待する:
true <=> false # => 1
false <=> true # => -1
編集 これは私が探していたものです:
false.to_i <=> true.to_i # => -1
<=>演算子は実際には「結合ブール」ではありません。順序が定義されている場合、同じクラスのアイテムを注文するためのものです。番号は注文されています。より大きいおよびより小さい。ブール値には固有の順序はありません。より大きい、またはその逆ではありません。1008675309truefalse
それらは同じクラスではありません。trueはのシングルトンですがTrueClass、falseはのシングルトンですFalseClass。true <=> trueリンゴとオレンジ(または、場合によっては、同じリンゴを持つリンゴ)を比較しています。
好奇心のために、なぜあなたtrue <=> falseは等しくなければならないと思います1か?編集:sawaによってそれに殴られた