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

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

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

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
По умолчанию /= и > приоритеты?

Я тут немного в недоумении, просветите пожалуйста, это в других языках тоже так, или это только AS3 отличился:

Код AS3:
var n:Number = 123456789;
var ret:int = 1;
while ((n /= 10) > 1) ret++;
trace(ret);
Подсчитывает длину.

Код AS3:
var n:Number = 123456789;
var ret:int = 1;
while (n /= 10 > 1) ret++;
trace(ret);
Бесконечный цикл (сравнение выполняется до присвоения).
__________________
Hell is the possibility of sanity

Старый 21.04.2010, 21:43
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 2  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
Ради интереса провёл тест в AVM1 - не компилирует
Код AS3:
var n:Number = 123456789;
var ret:Number = 1;
while (n /= 10 > 1) ret++;
trace(ret);
Цитата:
**Error** Scene=Scene 1, layer=Layer 1, frame=1:Line 3: Type mismatch in assignment statement: found Boolean where Number is required.
while (n /= 10 > 1) ret++;

Total ActionScript Errors: 1 Reported Errors: 1
AVM2:
Код AS1/AS2:
trace(n /= 10 > 1); //123456789, а не Boolean, как ожидалось
Добавлено через 1 минуту
Вот так скобки фп расставляет:
Код AS3:
n /= (10 > 1)
В итоге
Код AS3:
n /= true
n /= 1
n
Хотя не думаю, что ты не догадался об этом. А в чем вопрос, собственно?


Последний раз редактировалось Psycho Tiger; 21.04.2010 в 21:47.
Старый 21.04.2010, 21:52
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 3  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
wvxvw, по-моему, вполне логично, что операторы присвоения имеют более низкий приоритет перед другими операторами (за исключением , ). Или в чем недоумение заключается?

Старый 21.04.2010, 21:54
lowka вне форума Посмотреть профиль Отправить личное сообщение для lowka Найти все сообщения от lowka
  № 4  
Ответить с цитированием
lowka

Регистрация: Sep 2006
Сообщений: 256
Вообще это не должно компилироваться из-за того, что для нет операции деления для числа и Boolean.
__________________
:emocry:

Старый 21.04.2010, 21:57
orcpochta вне форума Посмотреть профиль Отправить личное сообщение для orcpochta Найти все сообщения от orcpochta
  № 5  
Ответить с цитированием
orcpochta

Регистрация: Feb 2008
Сообщений: 890
Цитата:
Сообщение от lowka Посмотреть сообщение
Вообще это не должно компилироваться из-за того, что для нет операции деления для числа и Boolean.
зато есть такое понятие, как приведение типов))
__________________
скриптограф

Старый 21.04.2010, 22:03
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 6  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
да вроде бы и нет противоречия:
/= присваивает результат от деления на то то, что ему дали, а во втором пример ты ему даешь 1 (10 > 1)
зы: результат излишней дружественности AS в части приведения типов

Добавлено через 5 минут
ззы: кому эти скобки мешали?, имо надо их всегда писать, да и читать проще


Последний раз редактировалось silin; 21.04.2010 в 22:09.
Старый 21.04.2010, 22:37
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 7  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Дада, а вот только инкремент / декремент, которые являются все теми же операциями присвоения работают как раз по-другому

lowka:
Выражение внутри while() кастуется к Boolean в любом случае. Вопрос бы о другом, почему операция деления и присвоения ведет себя не так, как операция прибавления и присвоения, например.
__________________
Hell is the possibility of sanity

Старый 21.04.2010, 23:16
  № 8  
Ответить с цитированием
Xero201
Guest

Сообщений: n/a
Цитата:
Сообщение от wvxvw Посмотреть сообщение
Дада, а вот только инкремент / декремент, которые являются все теми же операциями присвоения работают как раз по-другому

lowka:
Выражение внутри while() кастуется к Boolean в любом случае. Вопрос бы о другом, почему операция деления и присвоения ведет себя не так, как операция прибавления и присвоения, например.
инкремент / декремент - унарные операции (в отличие от тех же += и -=)
Код AS3:
while ((n /= 10) > 1) { ret+=10>1;}
trace(ret);
вот)

Старый 21.04.2010, 23:25
lowka вне форума Посмотреть профиль Отправить личное сообщение для lowka Найти все сообщения от lowka
  № 9  
Ответить с цитированием
lowka

Регистрация: Sep 2006
Сообщений: 256
вообще-то они одинаково себя ведут.
a += b + c есть a += (b + c), что есть (a + b) +c, что тождественно a + b + c , а для умножения/деления a*=b + c есть a *= (b + c) что есть a*(b + c), а это есть a*b + b*c.
__________________
:emocry:

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

блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
lowka, откомпилируйте 2 кода что привел автор и поймёте, что не одинаково.

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

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

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


 


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


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