【函数】loadcod() 与 eval()
【函数】:loadcode()
【函数说明】: 加载一AAuto代码、或一个AAuto代码文件,并创建一个函数对象。
可以接受参数(在被加载的aau文件内部用...接收参数),可以返回值。当然也可以返回带成员的对象。
【函数原型】:
函数对象,错误信息 = loadcodel( codeString | filepath )
参数可以是用字符串表示的AAuto代码,也可以是aau文件的路径.路径可以用斜杠作为首字符表示应用程序根目录。
该函数并不立即执行代码,而是返回一个函数对象.(执行代码可用eval函数)
如果加载代码失败,则返回的函数对象为null值,并在第二个返回值中返回错误信息.
【示例1】
在 1.aau 下写了一个函数:
function foo(a, b) {
return a + b;
}
在 2.aau 下可以这样调用:
//作为相对路径正反斜杠皆可$"\1.aau"
var a =loadcode($"/1.aau");
a();
io.open();
io.print(foo(1, 2)); //执行1.aau文件的foo函数,
运行显示3

在一个aau文件中,可以使用...三个连续的小圆点获取不定个数的匿名参数。可以在文件尾部返回任意多个值
【示例2】
io.open();//打开控制台
str="a,b,c,d=...
io.print(d,c,b,a)"
f=loadcode(str) //返回 f 函数
f(1,2,3,4,)//传递参数给f函数
运行显示:4 3 2 1
【函数】:eval()
【函数说明】:将字符串转换为代码执行,并返回一个或多个值,如果eval函数在执行时遇到错误,则抛出异常给调用者.
【函数原型】
返回值 = eval( codeString )
【两者区别】
loadcode并不立即执行代码,而是返回一个函数对象.eval立即运行代码,并将代码作为一个普通表达式直接计算出结果;
loadcode支持路径参数,eval并不支持路径参数,也l并不支持代码中的return语句
【示例3】
用loadcode
aa={12;33;44;34;99}
bb={'+';'-';'+';'*'}
tcode = {}
//组合操作数,与运算符
for(i=1;#aa ){
table.push(tcode,aa[ i ],bb[ i ])
}
//生成代码
code = string.join(tcode);
//加载代码生成函数对象
func = loadcode("return " + code)
//打开控制台
io.open()
//输出表达式,并计算结果
io.print( code , "=", func() )
运行显示:12+33-44+34*99 = 3367
用eval
aa={12;33;44;34;99}
bb={'+';'-';'+';'*'}
tcode = {}
//组合操作数,与运算符
for(i=1;#aa ){
table.push(tcode,aa[ i ],bb[ i ])
}
//字符串数组合并生成代码
code = string.join(tcode);
//打开控制台
io.open()
//用eval直接计算结果
io.print( code,"=",eval( code) )
运行显示:12+33-44+34*99 = 3367
浙公网安备 33010602011771号