![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Modus ponens
|
Нет, само по себе понятие "адрес возврата" специфично для языков с одним стеком / похожим на Си.
Например в Lisp, Matlab, ML и stackless Python такое понятие применимо только отчасти. В языке типа Forth, Postscript - вообще не применимо.
__________________
Hell is the possibility of sanity |
|
|||||
|
Modus ponens
|
Нет, yield - это частный случай со-процедуры "только в одну сторону", относится к goto так же, как if относится к goto. Т.е. его можно реализовать с помощью.
Т.е. чтобы реализовать yield нужно сделать дополнительные операции, нужно 1. сохранить состояние вызывающей процедуры, 2. восстановить состояние вызваной процедуры, 3. выполнить код до следующего yield, 4. восстановить состояние вызывающей процедуры заполнив необходимые значения только что вычисленными. goto - только инструмент для манипуляции / осуществления переходов, но вообще кода для реализации yield нужно больше.
__________________
Hell is the possibility of sanity |
|
|||||
|
Наткнулся на вопросы про выход из вложенных циклов на stackoverflow, похоже в бородатые годы AS3 умела делать метки для выхода по break;
Сейчас компилятор почему-то ругается и говорит что это не православно |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Покажите код, на который ругается.
__________________
Reality.getBounds(this); |
|
|||||
|
Пока копировал, понял ошибку
Не совсем интуитивно понятен принцип работы, ибо метка похоже должна ставиться перед самим циклом, а не после него. (Мне казалось что либо он начнет новую итерацию либо весь цикл заново) Как сделал я: for (var i: int = 0; i < numChildren; i++) { for (var j: int = 0; j < numChildren; j++) { if (somethingHappened(i, j)) { break OuterLoop; } } } OuterLoop: trace("out of the loop"); |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Да. Я же в этой же теме пример приводил)) break работает и просто для маркированных блоков кода, а continue только для циклов.
Метка это не точка, куда надо перейти. Это название блока, который будет прерван break (осуществлен выход из блока) или продолжен continue (начата новая итерация цикла).
__________________
Reality.getBounds(this); |
|
|||||
|
.
|
А с goto, который в определенных языках ведет себя как не goto и не call и не yield мне кто-нибудь расскажет? Или мне можно послать все знания о goto в далекое прошлое? А есть в каких-нибудь языках goto как обычный goto? Который просто кладет в счетчик команд адрес следующей инструкции.
|
![]() |
![]() |
Часовой пояс GMT +4, время: 11:31. |
|
|
« Предыдущая тема | Следующая тема » |
|
|