詢問對象是否是布爾值的最佳方式是什麼?知道是否是布爾值的最佳方法
按照要求,這裏的原因:
我一個打印的東西的方法,任何一種東西,當這個東西是一個布爾值,我想它打印「是」或「否」,而不是對或錯。我是做像這樣,但它看起來太一劈對我說:
[anObject
ifTrue: [ 'Yes' ]
ifFalse: [ 'No' ] ]
on: Error
do: [ anObject printString ]
詢問對象是否是布爾值的最佳方式是什麼?知道是否是布爾值的最佳方法
按照要求,這裏的原因:
我一個打印的東西的方法,任何一種東西,當這個東西是一個布爾值,我想它打印「是」或「否」,而不是對或錯。我是做像這樣,但它看起來太一劈對我說:
[anObject
ifTrue: [ 'Yes' ]
ifFalse: [ 'No' ] ]
on: Error
do: [ anObject printString ]
添加您自己的PRINTSTRING的定義則:
Object >> #bernatPrintString
^self printString
True >> #bernatPrintString
^'Yes'
False >> #bernatPrintString
^'No'
謝謝,這看起來更多OO – 2011-04-12 08:28:02
這是一個很好的解決方案,但它不處理printString的遞歸性,('IsBernatPrintingRecursive?' - > false)bernatPrintString。 – 2012-07-17 23:25:17
value isKindOf: Boolean
- 但我會避免這樣的檢查!也許有一些有點不對了,如果你需要做到這一點...
是的,這就是我想避免:) – 2011-04-07 16:51:47
我不認爲重點是要避免這種語法,但爲了避免檢查完全... – 2011-04-07 22:29:07
anObject == true or: [ anObject == false ]
謝謝,我想這是最有效的? – 2011-04-07 16:52:20
是的,這是非常有效的。它不發送任何消息;它被編譯成幾個有效的字節碼。 – 2011-04-13 05:14:53
更簡單,最有效的,而不是需要避免:value class == Boolean
這假定'true'和'false'都是布爾類的實例。但是在通常的布爾值的Smalltalk實現中,'true'是'True'類的單例實例,'false'是'False'類的單例實例。這兩個'True'和'Flase'類都從'Boolean'繼承。 – 2011-04-08 14:55:55
什麼比這更簡單?
anObject isBoolean ifTrue:[...] ifFalse:[...]
但isBoolean不存在於每一個方言;) – 2011-04-08 09:39:04
或許,如果你能解釋一下你爲什麼要」問一個反對它是否是布爾型的「專家將能夠提出與你需要的東西相匹配的東西。 – igouy 2011-04-07 19:19:44