![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|
|
|||||
|
Регистрация: Jan 2010
Сообщений: 28
|
package com { public class Util { public static function print(arg:String):void { trace(arg); } } } далее начинаются чудесаааатые чудеса: import com.Util; ... Util.print('test1'); var src:String = "namespace COM = 'com';\n" + "use namespace COM;\n" + "Util.print('test2');"; ByteLoader.loadBytes(esc.eval(src)); Цитата:
import com.Util; ... //Util.print('test1'); var src:String = "namespace COM = 'com';\n" + "use namespace COM;\n" + "Util.print('test2');"; ByteLoader.loadBytes(esc.eval(src)); Цитата:
__________________
GAE + Flex = CyoaWare =) |
|
|||||
|
Никаких чудес, в евале можно использовать только те классы, что вы использовали просто так, иначе их упоминаний не будет в заголовках swf файла( точнее abc файла) и они не могут быть использованы в динамике. Попробуйте получить имя этого класса через getDefinitionByName и у вас тоже ничего не получится. Для того чтоб класс можно было использовать достаточно его просто упомянуть, например так:
Это происходит потому что esc не собирает новую флешку с новыми хедерами, а исполняет код сам, тамарином.
Добавлено через 30 секунд блин, silin опередил
__________________
:) |
|
|||||
|
Modus ponens
|
Нет, это не область видимости, это класс Util не скомпилировался (т.как незачем) второй раз. Если класс не использовать, то компилятор его не прилинкует. А eval() скорее всего не занимается поиском (да и негде ему...) существующих классов, он просто скомпилировал код типа getproperty symboltableoffset XX ("Util") ну а когда оно выполнилось, оказалось, что строка из таблицы символов не относится ни к какому из известных объектов.
__________________
Hell is the possibility of sanity |
|
|||||
|
Регистрация: Jan 2010
Сообщений: 28
|
silin, Aquahawk, wvxvw - большое спасибо! =)
Злоупотреблю вашей добротой к моей глупости и моему невежеству, и спрошу ещё вот какую вещь: У меня есть ArrayCollection из объектов, свойства которых я использую в коде, который я потом eval'ю, следующим образом: var code:String = ""; for (var i:int = 0; i < attributes.length; i++) { if (attributes[i].type == "String") { code += "var " + a[i].id + ":String = \"" + a[i].value + "\";\n"; } else { code += "var " + a[i].id + ":int = " + a[i].value + ";\n"; } } code += mycode; // добавление кода, который в ходе своей работы изменяет значения переменных, добавленных в код выше
__________________
GAE + Flex = CyoaWare =) |
|
|||||
|
Регистрация: Jan 2010
Сообщений: 28
|
Попробую перефразировать.
В строковой переменной code я формирую текст кода, который потом выполняю с помощью esc.eval(code). У меня есть некий ArrayCollection, каждый элемент которого является объектом с вот такой структурой: {type: "Int", id: "zozo", value: 25} Я добавляю объекты из этого ArrayCollection, в формируемый мной текст кода, в виде инициализации переменных: for (var i:int = 0; i < myAC.length; i++) { if (myAC[i].type == "String") { code += "var " + myAC[i].id + ":String = \"" + myAC[i].value + "\";\n"; } else { code += "var " + myAC[i].id + ":int = " + myAC[i].value + ";\n"; } } // в результате, {type: "Int", id: "zozo", value: 25} попадает в код в виде var zozo:int = 25; Далее в code добавляется код, который изменяет значения проинициализированных таким образом переменных. Теперь вот думаю, что нужно добавить в конце code, что бы изменения этих переменных адекватно отразились на содержимом элементов myAC. =)) Добавлено через 20 минут Кажись нашол. Решением является такой код:
__________________
GAE + Flex = CyoaWare =) Последний раз редактировалось maksimov; 22.09.2011 в 20:44. |
![]() |
![]() |
Часовой пояс GMT +4, время: 20:03. |
|
|
« Предыдущая тема | Следующая тема » |
| Теги |
| hurlant eval |
| Опции темы | |
| Опции просмотра | |
|
|