Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 22.04.2009, 22:07
SunShadow вне форума Посмотреть профиль Отправить личное сообщение для SunShadow Найти все сообщения от SunShadow
  № 1  
Ответить с цитированием
SunShadow
 
Аватар для SunShadow

Регистрация: Apr 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 355
По умолчанию Совершенно не понятная ошибка switch

Внутри класса использую свитч сдежующего типа
Код AS3:
switch(true) {
	case shift && n:							
		break;
	case n:
		break;
	case cLock && shift:
		break;
	case cLock:
		break;
	case shift:
		break;
	default:
}
что там внутри выполняется не важно, но стоит одной из переменных shift, n или cLock стать отличным от Boolean(например var n:TextField) получаем ошибку с большим логом в output и полностью отсутстующим стеком при трассировке (без debug вообще весь Flash колом). Почему то приведение к нужному типу не срабатывает
Это что баг, или надо качать более свежий cs4?
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ

Старый 22.04.2009, 22:24
VVall вне форума Посмотреть профиль Отправить личное сообщение для VVall Найти все сообщения от VVall
  № 2  
Ответить с цитированием
VVall

Регистрация: Feb 2009
Сообщений: 1,195
А это вообще должно работать? Ведь будут срабатывать сразу несколько case.

Старый 22.04.2009, 23:27
DarkLight вне форума Посмотреть профиль Отправить личное сообщение для DarkLight Посетить домашнюю страницу DarkLight Найти все сообщения от DarkLight
  № 3  
Ответить с цитированием
DarkLight
ветеран форума
 
Аватар для DarkLight

Регистрация: May 2006
Адрес: Москва
Сообщений: 2,978
Отправить сообщение для DarkLight с помощью ICQ Отправить сообщение для DarkLight с помощью Skype™
case не предназначен для скармливания ему выражений разных типов, поэтому может происходить что угодно. По логике такое не должно компилироваться.

А вообще бывают проблемы: я недавно словил VerifyError на вложенном for-each цикле, пытаясь сделать break внешнего из внутреннего, используя метки.
__________________
4am is time to rock

Старый 22.04.2009, 23:39
BlooDHounD вне форума Посмотреть профиль Отправить личное сообщение для BlooDHounD Посетить домашнюю страницу BlooDHounD Найти все сообщения от BlooDHounD
  № 4  
Ответить с цитированием
BlooDHounD
стервочка (я мужик)
 
Аватар для BlooDHounD

блогер
Регистрация: Mar 2004
Адрес: Борисов
Сообщений: 3,161
Записей в блоге: 22
битовые операции дают на выходе число. switch работает как ===. поэтому true никогда не будет равно 1.

Старый 23.04.2009, 00:01
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 5  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Не, думаю, просто очередность выполнения - попробуйте обрамить скобками "()" выражения в кейсах.
Т.е.:
Код AS3:
switch (true)
{
    case (a && b):
            break;
    case (a || b):
            break;
}
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 23.04.2009 в 00:03.
Старый 23.04.2009, 01:13
BlooDHounD вне форума Посмотреть профиль Отправить личное сообщение для BlooDHounD Посетить домашнюю страницу BlooDHounD Найти все сообщения от BlooDHounD
  № 6  
Ответить с цитированием
BlooDHounD
стервочка (я мужик)
 
Аватар для BlooDHounD

блогер
Регистрация: Mar 2004
Адрес: Борисов
Сообщений: 3,161
Записей в блоге: 22
wvxvw, тьфу. неправильно взглянул. почему-то узрел, и увидел битовые операции всё равно смысл сообщения не меняется. 1 !== true.

Старый 23.04.2009, 07:52
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 7  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Такими switch-ами вы сносите башню компилятору, потом verifier-у, потом и плееру.
Не выпендривайтесь, напишите, чтобы всем было понятно.

Старый 23.04.2009, 08:40
SunShadow вне форума Посмотреть профиль Отправить личное сообщение для SunShadow Найти все сообщения от SunShadow
  № 8  
Ответить с цитированием
SunShadow
 
Аватар для SunShadow

Регистрация: Apr 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 355
Если прописывать варианты выбора как Boolean то все работает нормально. Лично я не вижу в этом ничего страшного. Данный подход часто применяю и в других средах. По мне так это гораздо компактнее и нагляднее чем условия
Код AS3:
if(a){} else if (b){} else if(c){} ... else{}
И компилятор, verifier и плеер если варинаты прописаны нормально ведут себя адекватно.

Добавлено через 2 минуты
Цитата:
Сообщение от VVall Посмотреть сообщение
А это вообще должно работать? Ведь будут срабатывать сразу несколько case.
Это обязательно будет работать) Если вы знаете что такое switch, то знаете, что после первого встреченного break выполнение кода внутри свитча прерывается и передается следующему за switch оператору.
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ

Старый 23.04.2009, 09:19
VVall вне форума Посмотреть профиль Отправить личное сообщение для VVall Найти все сообщения от VVall
  № 9  
Ответить с цитированием
VVall

Регистрация: Feb 2009
Сообщений: 1,195
И к чему этот рассказ про break? У вас может одновременно выполниться несколько условий в разных case - какой код будет выполнен и в каком порядке?

Старый 23.04.2009, 09:24
SunShadow вне форума Посмотреть профиль Отправить личное сообщение для SunShadow Найти все сообщения от SunShadow
  № 10  
Ответить с цитированием
SunShadow
 
Аватар для SunShadow

Регистрация: Apr 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 355
Строго в той последовательности в которой они расположены в коде
Код AS3:
switch(true) {
	case shift && n:							
		break;
	case n:
		break;
	case cLock && shift:
		break;
	case cLock:
		break;
	case shift:
		break;
	default:
}
сначала проверяется shift && n, затем n, cLock && shift и т.д. Как только одно из условий выполняется исполняется блок с командами внутри case, который завершаются break и соответственно выход из switch. Таким образом если shift && n выполняется то никаким образом в варианты выбора 2, 3 и т.д. вы попросту не попадете.
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ

Создать новую тему Ответ Часовой пояс GMT +4, время: 22:25.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 22:25.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.