2

オペレーターは<=>ブール値をうまく処理しません。

true <=> true # => 0
true <=> false # => nil

この動作は設計によるものですか、それとも何かが足りないのですか?私が期待する:

true <=> false # => 1
false <=> true # => -1

編集 これは私が探していたものです:

false.to_i <=> true.to_i # => -1
4

2 に答える 2

6

<=>演算子は実際には「結合ブール」ではありません。順序が定義されている場合、同じクラスのアイテムを注文するためのものです。番号は注文されています。より大きいおよびより小さい。ブール値には固有の順序はありません。より大きい、またはその逆ではありません。1008675309truefalse

于 2013-01-16T17:59:39.540 に答える
3

それらは同じクラスではありません。trueはのシングルトンですがTrueClassfalseはのシングルトンですFalseClasstrue <=> trueリンゴとオレンジ(または、場合によっては、同じリンゴを持つリンゴ)を比較しています。

好奇心のために、なぜあなたtrue <=> falseは等しくなければならないと思います1か?編集:sawaによってそれに殴られた

于 2013-01-16T17:54:48.293 に答える