【发布时间】:2014-01-11 19:56:31
【问题描述】:
ifEmpty:ifNotEmpty:, ifEmpty:, ifNotEmpty: ifNil:ifNotNil:, ifNil: 和 ifNotNil: 等消息的当前状态是什么?
它们是否可以在 Smalltalks 中使用,它们的行为是否一致?您仍然会在旧代码中看到类似“object isEmpty ifTrue: [...] ifFalse: [...]”的内容。
【问题讨论】:
ifEmpty:ifNotEmpty:, ifEmpty:, ifNotEmpty: ifNil:ifNotNil:, ifNil: 和 ifNotNil: 等消息的当前状态是什么?
它们是否可以在 Smalltalks 中使用,它们的行为是否一致?您仍然会在旧代码中看到类似“object isEmpty ifTrue: [...] ifFalse: [...]”的内容。
【问题讨论】:
目前,我认为Seaside coding convetions 很好地涵盖了最新技术:
便携性
[…]
请勿使用这些方法中的任何一种,它们会丢失、损坏或在某些平台上具有不同的语义:
[…]
- 对象:
#ifNotNil:,#ifNotNilDo:,#in:, ...- 布尔值:
#and:and:and:,#or:or:or:, ...- 收藏:
#=、#pairsDo:、#with:collect:- 字符串:
#match:- 流:
#position、#position:、#isEmpty[…]
(由你真正突出显示)
由于Seaside已经移植到Pharo、Squeak、GemStone、Dolphin、VisualWorks、VA Smalltalk、GNU Smalltalk,我认为这个列表有一定的权威性。
另请注意,即使#isEmpty 似乎也不能移植,至少对于 Streams 而言。
【讨论】: