【问题标题】:State of ifEmpty:ifNotEmpty:, ifNil:ifNotNil: and related messages across Smalltalks?ifEmpty:ifNotEmpty:, ifNil:ifNotNil: 的状态以及 Smalltalks 中的相关消息?
【发布时间】:2014-01-11 19:56:31
【问题描述】:

ifEmpty:ifNotEmpty:, ifEmpty:, ifNotEmpty: ifNil:ifNotNil:, ifNil: 和 ifNotNil: 等消息的当前状态是什么?

它们是否可以在 Smalltalks 中使用,它们的行为是否一致?您仍然会在旧代码中看到类似“object isEmpty ifTrue: [...] ifFalse: [...]”的内容。

【问题讨论】:

    标签: smalltalk pharo squeak


    【解决方案1】:

    目前,我认为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 而言。

    【讨论】:

    • 嗯,是的,我们可以信任 Seaside 开发人员,但在 Squeak 3.X 中确实如此,当 ifNotNil: 不带参数而 ifNotNilDo: 只带一个... ifNil:ifNotNil: 至少在 Squeak/Pharo/VW/stx/gst 的最新版本中,但我懒得检查所有方言...
    • 是的,我认为 Squeak 4.2+、Pharo 1.4+ 和 Gemstone 2.4+ 对于特定消息是相当安全的。其他方言也不知道
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-09
    • 1970-01-01
    • 2012-12-10
    • 2020-04-19
    • 2015-12-02
    相关资源
    最近更新 更多