String 是否可以将字符串用作AS3语句?

String 是否可以将字符串用作AS3语句?,string,actionscript-3,String,Actionscript 3,例如,我有一个字符串 var string:String = new String("myFunc(para1, para2);"); 是否有任何方法可以将字符串的这个值用作AS3语句 注意:参数的数量可能会有所不同,因为字符串的值将动态决定,因此如果您建议我使用字符串属性来分离参数和函数名,然后像在许多教程中一样使用它:- this[string](para1, para2); 那解决不了我的问题。我相信你仍然可以通过断开你的绳子来解决你的问题。您可以使用“rest”参数或

例如,我有一个字符串

    var string:String = new String("myFunc(para1, para2);");
是否有任何方法可以将字符串的这个值用作AS3语句

注意:参数的数量可能会有所不同,因为字符串的值将动态决定,因此如果您建议我使用字符串属性来分离参数和函数名,然后像在许多教程中一样使用它:-

    this[string](para1, para2);

那解决不了我的问题。

我相信你仍然可以通过断开你的绳子来解决你的问题。您可以使用“rest”参数或arguments对象编写方法/函数,以接受数量可变的参数。这两种情况在这里都有例子:

根据我的评论,一些示例代码:

// this just takes in a bunch of numbers and returns the sum
function myFunc(...args:Array):Number {
    var result:Number = 0;
    for(var counter:int = 0; counter < args.length; counter++){
        result += args[counter];
    }
    return result;
}

// can manually call it and pass in as many parameters as you want
myFunc(1,2,3); // will return 6
myFunc(1,2,3,4,5); // will return 15
myFunc(1,2,3,4,5,6,7,8,9,10); // will return 55


// and based on your comment:
var functionName:String = "myFunc";
var parameters:Array = new Array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20);
// since you've mentioned your parameters in an array already, can just use the apply() call as Pan suggested
this[functionName].apply(this, parameters); // will return 210
//这只是接收一组数字并返回总和
函数myFunc(…参数:数组):编号{
var结果:数值=0;
for(变量计数器:int=0;计数器
如果您指的是通过解释字符串中的代码来动态计算和执行表达式,那么ActionScript 3不像某些语言那样支持
eval()

有一些字节码生成器,如和,它们可以完成类似的代码实时解释

如前所述,您可以利用以下功能:

称为:

myFunc("para1");
myFunc("para1", "para2");
或者,使用对象传递参数数组,称为:

var f:Function = myFunc;
f.apply(this, ["para1", "para2"]);
var f:Function = myFunc;
f.call(this, "para1", "para2");
或者,使用传递参数,称为:

var f:Function = myFunc;
f.apply(this, ["para1", "para2"]);
var f:Function = myFunc;
f.call(this, "para1", "para2");
另一种方法是创建要解析的领域特定语言;或者,简单地将字符串值解析为ActionScript,例如:

package {

    public class DSL {

        public static function parse(thisArg:*, statement:String) {
            // get the function name
            var fn:String = statement.substr(0, statement.indexOf('('));

            // get parameters (between parenthesis)
            var params:Array = statement.substring(statement.indexOf('(') + 1, statement.lastIndexOf(')')).split(',');
            params.forEach(function(element:*, index:int, arr:Array):void {
                arr[index] = this[element.replace(/^\s+|\s+$/g, '')];
            }, thisArg);

            // execute
            var f:Function = thisArg[fn];
            f.apply(thisArg, params);
        }
    }
}
作为演示,调用
DSL.parse()
并传递一个引用函数的字符串和属性:

package {

    public class Demo {

        public var para1:String = "hello";
        public var para2:String = "world";

        public function myFunc(... args) {
            for each (var arg:String in args) {
                trace(arg);
            }
        }

        public function Demo() {
            DSL.parse(this, "myFunc(para1);");
            DSL.parse(this, "myFunc(para1, para2);");
        }
    }
}
这将产生:

hello

hello
world

你试过函数。应用了吗?读一下,应该可以。假设我已经把参数和函数名分开了。一个名为str(“myFunc”)的字符串和一个名为arr(para1、para2、para3)的数组。请帮助我编写调用此函数的代码。实际上,如果您在自己的数组中分隔了参数,您可以将该数组传递给您的方法/函数,然后处理它。但无论如何,我将添加一个使用rest参数/arguments对象的示例。我应该在编辑之前阅读另一个答案,但看起来Jason的答案有相同的东西,并且建议用另一种方法解决它