PDA

Просмотр полной версии : Не понятно как модификатор const влияет на числа.


chaos
13.05.2010, 08:35
Доброго времени суток!
Подскажите пожалуйста новичку по константам: не понятно как модификатор const влияет на числа.
Например

const a:int = 666;
a = 777;//Error

тут все понятно.

А вот тут нет

const a:int = 666;
a++;//нормально работает :(


как так?

ЗЫ когда дело касается классов, вроде все понятно - нельзя поменять ссылку на объект

proxiServer
13.05.2010, 10:30
А не с "666" пробовали? =)

wvxvw
13.05.2010, 11:14
Второе - баг. А вообще, AS3 не инлайнит константы и пользоваться в случае с числами, практически всегда лучше самими числами (ну только если там Пи или еще что-то такое, чтобы для удобства короче записать)...

chaos
13.05.2010, 12:34
Второе - баг. А вообще, AS3 не инлайнит константы и пользоваться в случае с числами, практически всегда лучше самими числами (ну только если там Пи или еще что-то такое, чтобы для удобства короче записать)...

мда. 6 лет пишу на С++ и еще с первых лет постоянно слышал что нефик использовать непонятные цифры. А тут(AS3) значит все иначе :) Забавно:wacko:

-De-
13.05.2010, 13:06
Ну если 6 лет, то наверное знаешь и зачем. И эти зачем остались и во флэше. Возможно в каком-то тормозящем куске есть смысл осторожно заменить константы на числа (и получить этак +5% производительности), но обычно - всё как в С++.

CrazyFlasher
13.05.2010, 13:17
const a:int = 666;
a++;//нормально работает :(
у меня не компилит

wvxvw
13.05.2010, 14:26
У меня четвертый СДК собрал и ничего не сказал...

Ну есть разница... Если создавать константу типа:
const ONE:uint = 1;
То это глупо.
А если
const AVOGADRO:Number = 1.660538783e23;
То это имеет смысл :)

chaos
13.05.2010, 14:32
const a:int = 666;
a++;//нормально работает :(
у меня не компилит

:eek:


Setting environment for using the Flex SDK.

C:\Program Files (x86)\Adobe\Flex Builder 3>java -version
java version "1.5.0_11"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_11-b03)
Java HotSpot(TM) Client VM (build 1.5.0_11-b03, mixed mode)

C:\Program Files (x86)\Adobe\Flex Builder 3>compc -version
Version 3.2.0 build 3958

C:\Program Files (x86)\Adobe\Flex Builder 3>cd c:\Users\dkononenko\temp\const_test

c:\Users\dkononenko\temp\const_test>cat ConstTestApp.as

package {
import flash.display.Sprite;

public class ConstTestApp extends Sprite {
public function ConstTestApp() {
const CONSTANTA:int = 1234;
CONSTANTA++;
}
}
}

c:\Users\dkononenko\temp\const_test>mxmlc ConstTestApp.as
Loading configuration file C:\Program Files (x86)\Adobe\Flex Builder 3\sdks\3.2.0\frameworks\flex-config.xml C:\Users\dkononenko\temp\const_test\ConstTestApp.swf (568 bytes)


как видите все "гуд" :)

CrazyFlasher
13.05.2010, 14:36
я билдил в cs4. Написал в кадре. И вот ошибка:
ReferenceError: Error #1074: Illegal write to read-only property a on Untitled_fla.MainTimeline.
at Untitled_fla::MainTimeline/frame1()

chaos
13.05.2010, 14:39
У меня четвертый СДК собрал и ничего не сказал...
такая же история. проверил под 3 и 4 на win и mac

Добавлено через 4 минуты
запостил баг https://bugs.adobe.com/jira/browse/ASC-4075
с янгл язом правда проблемы у мну :) ну думаю проблема будет понятна

Добавлено через 11 минут
Ну если 6 лет, то наверное знаешь и зачем...
*YES*

Добавлено через 20 минут
кто-то опередил https://bugs.adobe.com/jira/browse/ASC-4074

Добавлено через 32 минуты
upd: опередил господин wvxvw :)

wvxvw
13.05.2010, 19:42
Ничего, лучше им по нескольку раз напоминать - хуже от этого точно не будет :)

Да, и вообще, по-научному, это называется unfold constants, а не inline. Теперь еще осталось выяснить, как переводится :)

BlooDHounD
14.05.2010, 00:43
с членами класса выдаёт ошибку, а с локальными константами не выдаёт. поэтому у CrazyFlasher баг не срабатывает. локальные константы существуют только на момент компиляции. в рантайме они становятся обыкновенными переменными.

etc
14.05.2010, 11:51
CrazyFlasher, потому что в кадре.