2

我必须使用 if elseif elseif 检查 3 个条件。我怎么能在pharo中做到这一点。我做了但不确定,因为我没有在pharo中找到任何这样的应用程序。

x = 25
ifTrue:[DoSomething]
ifFalse:[DoSomething else].

x < 25
ifTrue: [DoSomething]
ifFalse:[Domething else].

x > 25
ifTrue: [DoSomething ]
ifFalse:[DoSomething else].
4

1 回答 1

3

您可以选择不同的设计(使用多态性、查找等),但这对于任何 OO 语言几乎都是相同的(特别是对于 Smalltalk,请参阅Refactoring if-chains in Smalltalk without class explode)。

在 Smalltalk(以及其他几种语言,例如 Ruby)中,您有一个额外的选择,那就是类扩展。您可以设计自己的“if”语句来匹配您的特定域并使代码更明显。

例如,在您给定的示例中,我可以向Number名为 的类添加一个新方法compareTo:lesser:equal:greater:,然后您的代码更改为

x compareTo: 25
    lesser: [ do something ]
    equals: [ do something else ]
    greater: [ do something entirely different ]

这自然取决于您的特定域,也许在不同的情况下,措辞会有所不同。例如,对于集合, there's col ifEmpty: [ ] ifNotEmpty: [ ],对于 nil there's ifNil:ifNotNil:,对于 detection detect:ifFound:ifNone:,对于 dictionariesat:ifPresent:ifAbsent:等。

于 2018-01-25T13:20:56.930 回答