Smalltalk では真は true 、偽は false だけです。
よく知られているように Smalltalk では条件分岐などの処理は単なるメソッドコールで、それらのメソッド(#ifTrue:ifFalse: など)はクラス Boolean に定義されています(実際には true 、false それぞれが属するクラスである True 、False でオーバーライドされている)。
したがって、ture もしくは false 以外のオブジェクトをレシーバにして起動しようとしてもエラー(実際には警告。 true として続行可能)になります。
Squeak Smalltalk では Infinity は Flaot infinity で、NaN は Float nan で作れます。この種の値を持つかどうかを含め Smalltalk 処理系ごとに違います。
true ifTrue: [#TRUE] ifFalse: [#FALSE] "=> #TRUE " false ifTrue: [#TRUE] ifFalse: [#FALSE] "=> #FALSE " 0 ifTrue: [#TRUE] ifFalse: [#FALSE] "=> NonBooleanReceiver: proceed for truth. " 1 ifTrue: [#TRUE] ifFalse: [#FALSE] "=> NonBooleanReceiver: proceed for truth. " 0.0 ifTrue: [#TRUE] ifFalse: [#FALSE] "=> NonBooleanReceiver: proceed for truth. " Float nan ifTrue: [#TRUE] ifFalse: [#FALSE] "=> NonBooleanReceiver: proceed for truth. " Float nan isNaN "=> true " Float nan = Float nan "=> false " Float infinity ifTrue: [#TRUE] ifFalse: [#FALSE] "=> NonBooleanReceiver: proceed for truth. " (Float infinity - 1) isInfinite "=> true " Float infinity - 1 ifTrue: [#TRUE] ifFalse: [#FALSE] "=> NonBooleanReceiver: proceed for truth. " (Float infinity - Float infinity) isNaN "=> true " Float infinity - Float infinity ifTrue: [#TRUE] ifFalse: [#FALSE] "=> NonBooleanReceiver: proceed for truth. " '0' ifTrue: [#TRUE] ifFalse: [#FALSE] "=> NonBooleanReceiver: proceed for truth. " '0.0' ifTrue: [#TRUE] ifFalse: [#FALSE] "=> NonBooleanReceiver: proceed for truth. " '' ifTrue: [#TRUE] ifFalse: [#FALSE] "=> NonBooleanReceiver: proceed for truth. " #() ifTrue: [#TRUE] ifFalse: [#FALSE] "=> NonBooleanReceiver: proceed for truth. " Dictionary new ifTrue: [#TRUE] ifFalse: [#FALSE] "=> NonBooleanReceiver: proceed for truth. " nil ifTrue: [#TRUE] ifFalse: [#FALSE] "=> NonBooleanReceiver: proceed for truth. " nil not "=> MessageNotUnderstood: UndefinedObject>>not "