好吧,继续介绍……所有的语言都会有自己的语法,包括如何定义变量、如何赋值、如何条件判断、如何循环。个人认为最能体现语言个性的就是for循环。先看js的,以计算1到10的整数和为例:
var sum = 0;
for (var i = 1; i <= 10; i++)
{
sum = sum + i;
}
alert(sum);
然后来看Lua的:
local sum = 0
for i = 1, 10 do
sum = sum + i
end
print(sum)完整的lua for循环语法是:
for var=exp1,exp2,exp3 do
something
end
其中exp1是起始值,exp2是结束值,exp3是step量,默认为1,例如上面的for循环如果改写成 i = 1, 9, 2的话那就是求1-9的奇数和。另外js还有一种for:
for (key in obj){alert(obj[key]);}Lua也有这种for:
for i,v in ipairs(myTable) do print(v) end这里可以牵扯出Lua一个更深的特性:Lua函数不光跟其他语言的函数一样接受多个参数,而且还可以有多个返回值。
function a()
return 1,2,3
end
local i,j,k = a() -- i:1, j:2, k:3
local m,n = a() -- m:1, n:2
local w,x,y,z = a() -- w:1, x:2, y:3, z:nil
函数返回值个数如果跟要赋值的变量个数不一样,如果返回值过多则自动抛弃多余的,如果要赋值的变量过多则把多余的变量置为nil。习惯了就好,唯一该注意的是顺序:
local b,c,d,e = 10, a() -- b:10, c:1, d:2, e:3
local f,g,h,i = a(), 10 -- f:1, g:10, h:nil, i:nil其它语言的使用者可能一开始很不习惯多个返回值(一种不确定的感觉从心里升起……)。js里面虽然构造一个object来返回也好――但毕竟需要构造object哇。其实Lua实现多个返回值也不复杂,其实就是把返回值压进一个栈里面,然后把整个栈返回回来就行,省去了自己手动构造table的麻烦。--tbc...