lua中定义函数
2008年5月23日 08:05 | Comments(0) | Category:Lua | Tags:
在lua中可以这样定义函数
-- add all elements of array `a'
function add (a)
local sum = 0
for i,v in ipairs(a) do
sum = sum + v
end
return sum
end
调用是也需要带括号,即使没有参数也要带括号。特例是如果只有一个字符常量参数或者是一个table constructor,可以省略括号。如print "Hello World"
print [[a multi-line <--> print([[a multi-line
message]] message]])
f{x=10, y=20}
lua为面向对象的函数调用提供了一个特殊语法,o:f(x)和o.f(o,x)意思相同。lua不检验实参的个数是否和形参匹配,多了被丢弃,少了就会设置为nil
假设一个如下定义的函数:
function f(a, b) return a or b end
we will have the following mapping from arguments to parameters:
CALL PARAMETERS
f(3) a=3, b=nil
f(3, 4) a=3, b=4
f(3, 4, 5) a=3, b=4 (5 is discarded)
lua中可变数量参数的函数
2008年5月23日 07:45 | Comments(7) | Category:Lua | Tags:
在lua中定义一个可以接受可变数量参数的函数如下:
printResult = ""
function print (...)
for i,v in ipairs(arg) do
printResult = printResult .. tostring(v) .. "\t"
end
printResult = printResult .. "\n"
end
...代表可变数量的参数,lua会把实际调用的参数组织成一个table,在函数中可以通过arg引用这个table,table和python中的dict,javascript中的对象类似,感觉应该是和javascript比较像,lua也是通过table实现了面向对象的功能,并且与javascript的prototype-based OO比较像。当然这个table除了实参外,还多了一个域名字为n,保存实参的个数。在lua中函数可以有多个返回值,可以local s1,s2=string.find(s, p) 获取多个返回值。用unpack函数可以把arg解开传给另外一个函数。
在context中某个lua脚本文件里直接通过...调用另外一个函数,这和unpack的作用是否相同,还没发现有介绍,继续学习。
PS:刚开始学习lua脚本语言,只是把自己看到的记录下来,加深印象,错误在所难免。