询问对象是否是布尔值的最佳方式是什么?知道是否是布尔值的最佳方法
按照要求,这里的原因:
我一个打印的东西的方法,任何一种东西,当这个东西是一个布尔值,我想它打印“是”或“否”,而不是对或错。我是做像这样,但它看起来太一劈对我说:
[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