2016-07-07 2 views
1

Я ищу способ уплотнения некоторых из моих AS3-кода, чтобы избежать почти дублирующих команд.AS3 таргетинг на класс контроллера с использованием строки

Проблема в том, что у меня есть несколько переменных с почти одним и тем же именем, например. frenchLanguage, englishLanguage, germanLanguage, spanishLanguage

Класс My Controller содержит общедоступные статические переменные (к ним обращаются через несколько классов), и мне нужен способ динамического вызова нескольких из этих переменных. Если переменные в классе вы вызываете их вы можете сделать это, чтобы получить доступ к ним динамически:

this["spanish"+"Language"] 

В AS3 это не возможно, чтобы написать что-то вроде:

Controller.this["spanish"+"Language"]

Есть ли какие-либо способ достичь этого? Хотя все работает, я хочу, чтобы мой код был как можно более минимальным.

+0

Почему бы просто не использовать статический dictionairy в вашем классе контроллера? – DodgerThud

+0

Можете ли вы немного рассказать об этом? – AntBirch

+1

[Ссылка] (http: //help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/utils/Dictionary.html) Создайте публичную переменную статического словаря в вашем контроллере. Строка, которую вы сейчас проходите («spanishLanguage», например »), будет ключом для объекта, который содержит вашу нужную информацию. Предполагая, что Dictionairy называется' languages', вы можете называть его следующим образом: 'Controler.languages ​​[" spanishLanguage " ] ' – DodgerThud

ответ

0

можно получить доступ public static свойства класса таким образом (предполагается, что имя класса является Controller как в вашем примере:

Controller['propertyName'] 

Я не знаю, как это помогает иметь «минимальный код», но это будет другая тема/вопрос, который, возможно, потребуется еще несколько деталей о том, что вы хотите для того чтобы достигнуть.

Сказав, что, мне нравится подход DodgerThud предполагает в комментариях группировки аналогичных значений в (dynamic) Object или Dictonary и дайте ему свое имя.

Имейте в виду, что если строка, которую вы передаете в качестве ключа к классу или динамическому объекту, создается из (текстового) пользовательского ввода, вы должны иметь некоторые проверки на достоверность этих данных, иначе ваша программа может произойти сбой или подвергать пользователя другим полям.

0

Это имело бы смысл использовать словарь объект для набора переменных, унаследованные: он обеспечивает надежную логику, и это происходит на работу ...

Я не думаю, что это то, что вы пытаетесь достичь. Возможно, я ошибаюсь.

Классы в AS3 всегда завернуты в package - это верно ли скомпилирован с Flash, Flex, Air или любой другой ...

Не позволяйте Adobe запутать вас. Это было сделано только в AS3 для использования соглашений на основе Java. Независимо от того, что, к сожалению, часто неверно набираемый язык часто неправильно понимается. Итак:

this["SuperObject"]["SubObject"]["ObjectsMethod"][ObjectsMethodsVariable"](args..); 

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

Если эффективность становится проблемой ..

Использование:

package packages { 
import flash.*.*: 
class This implements ISpecialInterface { 
// Data Objects and Function Model 
// for This Class 
} 
package packages { 
import... 
class ISpecialInterface extends IEventDispatcher 

 Смежные вопросы

  • Нет связанных вопросов^_^