Как «продолжить» в цикле в smalltalk - PullRequest
1 голос
/ 10 мая 2019

У меня есть следующий код, где я хочу «продолжить», если я меньше 5:

1 to: 10 do: [ :i |
    i < 5 ifTrue: [ continue ].
    'Square of i = ', (i * i) printNl.
]

'продолжить' в приведенном выше коде, очевидно, не работает. Я знаю, что exit можно использовать для выхода из цикла. Но как continue? Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 10 мая 2019

В вашем случае вы можете просто использовать 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, он выходит из блока получателя (возвращая nil в Pharo).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...