visualxyk 发表于 2008-4-14 21:03:00
其中f为loadfile编译完文件后返回的chunk块.
loadstring与loadfile相似,但它读入的是一个字符串. f = loadstring("i = i+1") f() 执行f()相当于执行了i = i+1. 另外,loadstring总是假设在全局环境下编译它的串.
require()函数用来加载运行库,它与dofile()完成相同的功能,但有两点不同: 一,require()会搜索目录加载文件. 二,require()会判断是否文件已经加载,避免重复加载同一文件. require()的参数(路径)是一个模式列表.更明确地说,每一个模式是包含可选的问号的文件名.
可以通过访问全局变量 _LOADED["filename"] 是否为nil来判断指定文件是不是被加载了. |
范型for循环
visualxyk 发表于 2008-4-14 20:22:00
for var_list in exp_list do body end var_list为一个或多个的变量名列表,exp_list为一个或多个的表达式列表:迭代工厂的调用. 如:for var1, var2, var3, var4... in exp1, exp2, exp3 do block end 其中var1称为控制变量.当它为nil时for循环结束.
范型for的执行过程为: 首先,初始化,计算in后面的表达式的值.它返回范型for需要的三个变量(迭代函数,状态常量,控制变量).与多赋值一样,返回的结果个数不足变量列表个数时用nil补足,多出的话则被丢弃. 其实,将状态变量和控制变量作为参数调用迭代函数.(注意,对于范型for来说,状态变量没有用处,仅仅在初始化时获取它的值并传递给迭代函数.) 然后,将迭代器返回的值传递给变量列表var_list,即var1, var2... 如果返回的第一个值var1的值为nil则结束循环,否则执行循环体 最后,跳到第二步再次调用迭代函数. 更具体地说, for var1, var2, var3.... in exp_list do block end 的具体执行过程也可以这样表示:
也就是说,如果我们的迭代函数是f,状态变量是s,控制变量的初值是a0,那么循环将这样进行: a1 = f(s, a0), a2 = f(s, a1), a3 = f(s, a2), a4 = f(s, a3), a5=f(s, a4), ....直到an == nil为止.
|