快手软件

【函数】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





attachment.gif

 



在一个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

posted on 2010-12-04 03:02  快手软件  阅读(353)  评论(0)    收藏  举报

导航