Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Запись поля в Оbjeсt через ссылку в фигурных скобках { } (http://www.flasher.ru/forum/showthread.php?t=213708)

robotR2D2 21.12.2016 16:36

Запись поля в Оbjeсt через ссылку в фигурных скобках { }
 
Добрый день.
Интересует возможность записать поля в Оbjeсt из переменной при создании - { поле:значение }. В значение можно прямо положить какую-то переменную. А вот поле обязательно должно быть записано через "" или же запись будет прямо использовано как имя поля.
Мне же нужно что-то вроде { this.somevalue/*link*/:str }. При такой записи компилятор ругается. Я раньше делал так { (this.somevalue as String):str }, и это работало. Но после обновления flex sdk компилятор, видимо, изменили, и сейчас мне приходиться городить:
Код AS3:

var o:Оbjeсt = { };
o[somevalue] = str;
//use 'o'

Есть ли какие-то иные варианты для сокращенной записи?

dark256 21.12.2016 16:51

Код AS3:

var obj:Object = {A:1,B:2,SomethingString:'thisString'};
obj.C = 3;
obj['TEST'] = 4;
trace( obj.A );
trace( obj.C );
trace( obj.TEST );
trace( obj['A'] );
trace( obj.SomethingString );


robotR2D2 21.12.2016 17:13

Не понял, к чему этот код. Может я не верно выразился. Меня интересует возможность создать объект, и записать в него поля без создания промежуточной переменной под Object.
Код AS3:

var someField:String = "name";
var someName:String = "John";
 
someNameHandleFunction( { someField:someName } );

В данной записи в методе будет получен объект с полем "someField" и значением "John". Мне же нужно получить поле "name" со значением "John".

caseyryan 21.12.2016 17:53

нельзя так сделать

dark256 21.12.2016 20:06

Код AS3:

var someField:String = "name";
var someName:String = "John";
 
 
function hndl( obj:Object):void{
        trace( obj[someField] );
        trace( obj.name );
}
 
hndl( { (someField as String):someName } );


caseyryan 21.12.2016 20:10

Цитата:

Сообщение от dark256 (Сообщение 1198137)
Код AS3:

var someField:String = "name";
var someName:String = "John";
 
 
function hndl( obj:Object):void{
        trace( obj[someField] );
}
 
hndl( { (someField as String):someName } );


Эта конструкция тебе вернет в качестве ключа строчное значение переменной, а не запишет ключом название переменной

dark256 21.12.2016 20:12

Цитата:

Сообщение от caseyryan (Сообщение 1198138)
Эта конструкция тебе вернет в качестве ключа строчное значение переменной, а не запишет ключом название переменной

Выше - с ключем. Или я все равно не понял - что, куда, кому и как вернуть :)

robotR2D2 21.12.2016 20:29

Цитата:

Сообщение от dark256 (Сообщение 1198137)
Код AS3:

var someField:String = "name";
var someName:String = "John";
 
 
function hndl( obj:Object):void{
        trace( obj[someField] );
        trace( obj.name );
}
 
hndl( { (someField as String):someName } );


В том-то и дело, что у меня строка hndl( { (someField as String):someName } ); выдаст ошибку еще на этапе сборки swf. Раньше работало. Теперь ни в какую на свежескачанном flex sdk.

P.S. "Syntax error: '(' is not allowed here" И "Syntax error: Label must be a simple identifier.".

dark256 21.12.2016 20:35

Цитата:

Сообщение от robotR2D2 (Сообщение 1198141)
В том-то и дело, что у меня строка hndl( { (someField as String):someName } ); выдаст ошибку еще на этапе сборки swf. Раньше работало. Теперь ни в какую на свежескачанном flex sdk.

Тьфу. Это я дятел, туплю уже. Не дочитал. Тогда - увы и ах. Ни знаю :)

Партизан 21.12.2016 20:50

Вообще не представляю зачем вам это нужно...
Код AS3:

var varName:String = 'property';
                var o:Object = {(varName.toString()):'value'};
                trace(o.property);

или
Код AS3:

var varName:String = 'property';
                var o:Object = {([varName]):'value'};
                trace(o.property);

Компилируется, работает. Но вот форматирование кода в FD не хочет работать с таким "хаком".

robotR2D2 21.12.2016 21:19

Цитата:

Сообщение от Партизан (Сообщение 1198143)
Компилируется, работает.

У меня не компилируется. Ошибки:
- Syntax error: '(' is not allowed here
- Syntax error: Expected SCOPE_CLOSE but got ':'
в обоих случаях.

EDIT. Я понял в чем проблема. Я собирал под air, через air sdk. Во flex sdk такой проблемы нет... Мой старый вариант через { (someField as String):someValue } тоже там работает.


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

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