AVM2 - tamarin外篇---As3Eval

1、As3Eval简介

    这是一个由Tamarin衍生出的as3库,作者把Tamarin的思想融合到了as3的库中。支持as3和ES4两种格式的动态编译、运行,有AS3来解释AS3或ES4,是不是很神奇呢?

   这是一个不折不扣的AS3写的AS3脚本引擎。可以编译很多AS3代码,包括类、方法等。同时也可以融合JS和abc文件,进行多方面编程。

    这里是DEMO。此库提供在线源码和源码下载,还提供编译好的SWC组件

 

 2、简单测试As3Eval

      首先我们新建一个Script类

  1. package util.script {
  2.      import com.hurlant.eval.ByteLoader;
  3.      import com.hurlant.eval.Debug;
  4.      import com.hurlant.eval.Evaluator;
  5.      import com.hurlant.test.ILogger;
  6.      import flash.utils.ByteArray;
  7.      public class Script {
  8.          public function eval(src : String) : void {
  9.              var evaluator:Evaluator = new Evaluator
  10.              var bytes:ByteArray = evaluator.eval(src);
  11.              ByteLoader.loadBytes(bytes);
  12.          }
  13.      }
  14.  }

这样,我们就可以使用动态的脚本来工作了

比如令var str : String = "function test() : String {" + "return 'test';  " +"};";

 然后new Script().eval(str);

这样我们就eval了这个test方法

3、自定义外部方法

之后我们可以建立一个实现类,为了方便,我们选择在顶层包建立

  1. package {
  2.      public class Util {
  3.           public static function print(str : String):void {
  4.              trace(str);
  5.          }
  6.      }
  7.  } 

然后我们来扩展实现这个test

new Script().eval(str + "  var temp =  test();  Util.print(temp)");

就相当于

  1. function test() : String {
  2.      return 'test';
  3. }
  4.   var temp = test();
  5.   Util.print(temp);

可以看出Util.print来自eval外部,但是测试通过,说明eval脚本引擎可以与外部类和方法进行沟通。



你可能感兴趣的:(AVM2 - tamarin外篇---As3Eval)