Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 AS3Eval图书馆正在抱怨;未定义变量编译";_Actionscript 3_Flash - Fatal编程技术网

Actionscript 3 AS3Eval图书馆正在抱怨;未定义变量编译";

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

我正在使用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 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));