![]() |
|
||||||||||
|
|||||
|
Modus ponens
|
var n:int = 8; var a:Array/*int*/ = []; var from:int = 100; trace(n); switch (--n) { case 7: a[n] = from++; case 6: a[n] = from++; case 5: a[n] = from++; case 4: a[n] = from++; case 3: a[n] = from++; case 2: a[n] = from++; case 1: a[n] = from++; case 0: a[n] = from++; default: break; } trace(a, n, from); EDIT: Оказалось, что условие switch'a не проверяется в каждом кейсе... var n:int = 0; var a:Array/*int*/ = []; var from:int = 100; trace(n); switch (true) { case 0: a[n++] = from++; case 1: a[n++] = from++; case 2: a[n++] = from++; case 3: a[n++] = from++; case 4: a[n++] = from++; case 5: a[n++] = from++; case 6: a[n++] = from++; case 7: a[n++] = from++; default: break; } trace(a, n, from);
__________________
Hell is the possibility of sanity Последний раз редактировалось wvxvw; 10.03.2010 в 16:04. |
|
|||||
|
Регистрация: May 2009
Сообщений: 220
|
в общем-то, так и должно быть, как вы привели в первой части поста.
Проверка в блоке switch идет до первого вхождения условия, а потом, если не встречается break -> выполняются команды все подряд. Это позволяет, к примеру, обозначить команду "влево" для персонажа более коротко: нежели: |
|
|||||
|
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
wvxvw - у тебя украли аккаунт? уж больно вопросы нубские))))))
__________________
Отряд Котовскага |
|
|||||
|
Цитата:
|
|
|||||
|
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
var n:int = 0; var a:Array/*int*/ = []; var from:int = 100; trace(n); switch (true) { case 0: { a[n++] = from++ }; case 1: { a[n++] = from++ }; case 2: { a[n++] = from++ }; case 3: { a[n++] = from++ }; case 4: { a[n++] = from++ }; case 5: { a[n++] = from++ }; case 6: { a[n++] = from++ }; case 7: { a[n++] = from++ }; default: break; } trace(a, n, from); ![]() |
|
|||||
|
loading 50%
|
wvxvw, а Вы раньше уже использовали такую конструкцию: switch (true) ?
По моему скромному мнению это вызовет ошибку. Если туда поставить нормальную переменную то все заработает. Свитч без брейков - фи. |
|
|||||
|
Modus ponens
|
Switch без брейков - это Duff's device!
так что не надо. Это можно сказать старинный способ оптимизировать циклы. А вообще, я на самом деле пытался сделать небезопасный поинтер силами AS но чет пока не получается ![]() Последняя попытка выглядела вот так: var n:int = 0; var a:Array/*int*/ = []; trace(n); switch (true) { case true: a[++n] = n; case true: a[++n] = n; case true: a[++n] = n; case true: a[++n] = n; case true: a[++n] = n; case true: a[++n] = n; case true: a[++n] = n; case true: a[++n] = n; default: break; } trace(a, n); ![]()
__________________
Hell is the possibility of sanity |
|
|||||
|
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
непонятно что ты хочешь сделать.
var n:int = 0; var a:Array/*int*/ = []; trace(n); switch (true)// выполнится один раз { case true: a[++n] = n;//всегда case true: a[++n] = n;//всегда case true: a[++n] = n;//всегда case true: a[++n] = n;//всегда case true: a[++n] = n;//всегда case true: a[++n] = n;//всегда case true: a[++n] = n;//всегда case true: a[++n] = n;//всегда default: break; } trace(a, n); аналогично: var n:int = 0; var a:Array/*int*/ = []; trace(n); a[++n] = n; a[++n] = n; a[++n] = n; a[++n] = n; a[++n] = n; a[++n] = n; a[++n] = n; a[++n] = n; trace(a, n); в этом коде при портировании вы забыли про while strcpy(to, from, count) register char *to, *from; register count; { register n = (count + 7) / 8; switch (count % 8) { case 0: do { *to = *from++; case 7: *to = *from++; case 6: *to = *from++; case 5: *to = *from++; case 4: *to = *from++; case 3: *to = *from++; case 2: *to = *from++; case 1: *to = *from++; } while (--n > 0); // вот тут то и делается возврат к свичу, вернее, к выбору метки } }
__________________
Отряд Котовскага Последний раз редактировалось Котяра; 11.03.2010 в 09:36. |
![]() |
![]() |
Часовой пояс GMT +4, время: 08:02. |
|
|
« Предыдущая тема | Следующая тема » |
|
|