![]() |
|
||||||||||
|
|||||
|
Modus ponens
|
Код AS3:
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 не проверяется в каждом кейсе... Код AS3:
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); Последний раз редактировалось wvxvw; 10.03.2010 в 15:04. |
|
|||||
|
Регистрация: May 2009
Сообщений: 206
|
в общем-то, так и должно быть, как вы привели в первой части поста.
Проверка в блоке switch идет до первого вхождения условия, а потом, если не встречается break -> выполняются команды все подряд. Это позволяет, к примеру, обозначить команду "влево" для персонажа более коротко: Код AS3:
switch (e.keyCode) { ... case 37: case 65: trace("влево"); break; ... } Код AS3:
switch (e.keyCode) { ... case 37: trace("влево"); break; case 65: trace("влево"); break; ... } |
|
|||||
|
Modus ponens
|
А вы второй пример попробуйте, первый был неудачный просто.
|
|
|||||
|
Цитата:
|
|
|||||
|
Пока идей никаких нету
модератор
Регистрация: Sep 2006
Адрес: Gomel
Сообщений: 2,952
|
Код AS3:
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 но чет пока не получается ![]() Последняя попытка выглядела вот так: Код AS3:
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); ![]() |
|
|||||
|
непонятно что ты хочешь сделать.
Код AS3:
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); аналогично: Код AS3:
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 Код AS3:
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 в 08:36. |
![]() |
![]() |
Часовой пояс GMT +4, время: 12:08. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|