如何在Smalltalk中循环“继续”

时间:2019-05-10 18:41:51

标签: loops smalltalk continue

如果我小于5,我有以下代码要“继续”:

1 to: 10 do: [ :i |
    i < 5 ifTrue: [ continue ].
    'Square of i = ', (i * i) printNl.
]
上面代码中的

'continue'显然不起作用。我知道exit可用于打破循环。但是如何continue?感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您可以使用ifFalse:

1 to: 10 do: [ :i |
    i < 5 ifTrue: [ 
        "Any code you need"
    ] ifFalse: [ 'Square of i = ', (i * i) printNl ].
]

以下代码可能仅在Pharo中有效。 (它在GNU Smalltalk中不起作用,在Smalltalk / X中,如果使用正确的模数,它可能会起作用。%返回复数):

    1 to: 10 do: [ :i |
        [ :continue |
            i % 5 = 0 ifTrue: [ 
                Transcript show: i; cr.
                continue value ].
            Transcript 
                show: i;
                show: ', '.     
        ] valueWithExit.
    ]

valueWithExit在Pharo中的实现:

valueWithExit 
      self value: [ ^nil ]

含义:

接收者必须是一个参数的块。经过评估并通过一个块时,发送value消息时将退出接收器块(在Pharo中返回nil)。