【发布时间】:2018-01-25 11:52:27
【问题描述】:
我必须使用 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].
【问题讨论】:
-
你可以天真地做一些类似
x < 25 ifTrue: [ ... ] ifFalse: [ <something else>. x = 25 ifTrue: [ ... ] ifFalse: [ <something else>. x > 25 ifTrue: [ ...] ifFalse: [ ... ] ] ]的事情。但你可能想看看Refactoring if-chains in Smalltalk without class explosion。 -
如果您将“做某事”视为动作(A1、A2、A3、...、A6),那么对于
x = 25,您需要 A1、A4、A6,对于 @ 987654325@ 需要 A2、A3、A6,x > 25需要 A2、A4、A5。不管语言如何,我都会检查我的整体设计,看看是否有重构。否则,您所拥有的可能是最清晰的编写方式。如果它们本身是复杂的动作,则这些动作可能需要是它们自己的方法来清楚地说明它们。就目前而言,就您目前所展示的情况而言,很难提供明确的答案。