Actionscript 3 AS3Eval图书馆正在抱怨;未定义变量编译";
我正在使用FlashBuilder 4.6,并使用AS3Eval v0.3库,来自: 该库在我的Flex 4.6.0项目中的一个项目中全面运行,但在另一个项目中未运行(与EvalES4.swc库相同的库链接“合并到代码中”) 在第一个项目中,以下代码起作用:Actionscript 3 AS3Eval图书馆正在抱怨;未定义变量编译";,actionscript-3,flash,Actionscript 3,Flash,我正在使用FlashBuilder 4.6,并使用AS3Eval v0.3库,来自: 该库在我的Flex 4.6.0项目中的一个项目中全面运行,但在另一个项目中未运行(与EvalES4.swc库相同的库链接“合并到代码中”) 在第一个项目中,以下代码起作用: private var compiler:CompiledESC = new CompiledESC; public function compile(code: String) : ByteArray { return compil
private var compiler:CompiledESC = new CompiledESC;
public function compile(code: String) : ByteArray {
return compiler.eval(code);
}
在其他项目中失败,原因如下:
引用错误:错误#1065:未定义变量编译。
错误引用了AS3Eval库(该EvalES4.swc文件)中的以下行
看起来库无法在另一个项目中完全加载Tamarin ESC
我已经检查了这两个项目(它们使用相同的库…但仍处于选中状态)是否通过成功加载Tamarin ESC
// inside CompiledESC.as
private function loadESC():void {
var a:Array = [
new debug_abc as ByteArray,
new util_abc as ByteArray,
new bytes_tamarin_abc as ByteArray,
new util_tamarin_abc as ByteArray,
new lex_char_abc as ByteArray,
new lex_scan_abc as ByteArray,
new lex_token_abc as ByteArray,
new ast_abc as ByteArray,
new parse_abc as ByteArray,
new asm_abc as ByteArray,
new abc_abc as ByteArray,
new emit_abc as ByteArray,
new cogen_abc as ByteArray,
new cogen_stmt_abc as ByteArray,
new cogen_expr_abc as ByteArray,
new esc_core_abc as ByteArray,
new eval_support_abc as ByteArray,
new esc_env_abc as ByteArray,
]
ByteLoader.loadBytes(a, true);
}
这些ByteArray类使用[Embed](查看库代码)嵌入到SWC中,所有ByteArray在这两种情况下都是通过ByteLoader初始化和加载的
到目前为止,我还没有找到任何线索,为什么编译对我的第一个项目有效,而对另一个项目无效。有没有人有过类似的经历或一些提示是什么导致了问题
最好的,
Jakub您应该检查权限是否与第一个项目相同。您正在从外部合并一个库(如果我理解正确的话),这允许吗?您应该检查权限是否与第一个项目相同。您正在从外部合并一个库(如果我理解正确的话),这允许吗?Ha 我太绝望了,找到了解决办法 看来,CompiledESC不能在创建它的同一帧中使用
因此,换句话说,像这样的将不起作用:
public function compile(code: String) : ByteArray {
var compiler:CompiledESC = new CompiledESC();
return compiler.eval(code);
}
但是以下代码将起作用(应用程序加载、初始化CompileESC,然后用户单击RUN!按钮,这与创建CompileESC的帧不同): 不要期望myAS3Code会立即执行。同样,只要您“让出”线程并让VM真正加载代码,代码就会被加载 希望这对处于同样情况的人有所帮助 最好的, 雅库布哈 我太绝望了,找到了解决办法 看来,CompiledESC不能在创建它的同一帧中使用
因此,换句话说,像这样的将不起作用:
public function compile(code: String) : ByteArray {
var compiler:CompiledESC = new CompiledESC();
return compiler.eval(code);
}
但是以下代码将起作用(应用程序加载、初始化CompileESC,然后用户单击RUN!按钮,这与创建CompileESC的帧不同): 不要期望myAS3Code会立即执行。同样,只要您“让出”线程并让VM真正加载代码,代码就会被加载 希望这对处于同样情况的人有所帮助 最好的,
Jakub谢谢你的提示,但我终于找到了解决办法(见下文)。干杯谢谢你的提示,但我终于找到了解决办法(见下文)。干杯
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
>
<fx:Script>
<![CDATA[
import com.hurlant.eval.CompiledESC;
import mx.events.FlexEvent;
private var compiler:CompiledESC = new CompiledESC();
protected function button1_clickHandler(event:MouseEvent):void
{
compiler.eval("trace(\"hello!\")");
}
]]>
</fx:Script>
<mx:Button label="RUN!" click="button1_clickHandler(event)" />
</s:Application>
ByteLoader.load(compiler.eval(myAS3Code));