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的答案有相同的东西,并且建议用另一种方法解决它