所以,我有一个用户应该定义ActionScript函数的应用程序。
我需要用什么来获取用户的字符串并将其转换为字节码,以便我可以将它与as3-commons-bytecode一起使用?
修改
我认为我不够清楚。我需要转:if(!myValue) {...}
进入这个:
...
findpropstrict private::myValue
getproperty private::myValue
not
iffalse L1
...
因为有了这个^^^^代码,我可以用as3-commons-bytecode做我需要的。
我查看了this app's源代码。这是非常令人困惑的,项目是旧的,代码是一团糟,但它的工作原理。我需要找到“神奇发生的地方”。你能给我指路吗?
答案 0 :(得分:2)
答案 1 :(得分:0)
我不知道有任何库为您执行此操作,但要实现此功能,您应该将用户的输入解析为函数名称。
例如,您可以通过将其名称设置为String
来调用函数,如下所示:
var functionName:String = "myMethod";
function myMethod():void
{
trace("myMethod");
}
this[functionName](); //traces "myMethod"
当然,如果您希望通过获取/设置对象及其属性以及任何其他用户定义的语句来解释高级字符串,那么就需要编写相当复杂的字符串到字节码转换器。
更新: 还有AS3Eval库可以完成这项工作。看看http://eval.hurlant.com/
答案 2 :(得分:0)
究竟想做什么?要编译“string”,字符串必须是编译器的有意义的东西,例如package不是简单的字符串(如'asdas')。如果您不习惯使用flash / flex编译器,可以使用Ant或Haxe将AS编译为ABC。但这是一个问题 - 你将如何开始这个ABC?
答案 3 :(得分:0)
有一个Haxe库,可以在运行时将Actionscript汇编语言编译成ABC,但这仍然比你通常编写的Actionscript低。
http://haxe.org/com/libs/format/abc
最有可能的解决方案是服务器或其他可以为您编译和返回SWF内容的进程。 Haxe有一个非常快速和简单的编译器,但也可以使用Tamarin或其他解决方案在服务器上编译AS3。
实际上,有一个用于执行Haxe代码的运行时库,它同样与Actionscript非常相似。可能值得研究: