2010年5月5日星期三

[Note] Programming In Lua 笔记(2): 函数

21.
调用函数的时候,如果参数列表为空,必须使用()表明是函数调用。
上述规则有一个例外,当函数只有一个参数并且这个参数是字符串或者表构造的时候,()可有可无:
print "Hello World" <--> print("Hello World")
dofile 'a.lua' <--> dofile ('a.lua')
print [[a multi-line message]]<--> print([[a multi-line message]])
f{x=10, y=20} <--> f({x=10, y=20})
type{} <--> type({})

22.
Lua函数实参和形参的匹配与赋值语句类似,多余部分被忽略,缺少部分用nil补足。
-- 不知道Lua里面有没有与python类似的默认参数? 支持, 不过有所不同, 参见PIL 5.3 命名参数

23.
多返回值的函数调用 的 返回值:
1). 当调用作为表达式最后一个参数或者仅有一个参数时,根据变量个数函数尽可能多地返回多个值,不足补nil,超出舍去。
2). 其他情况下,函数调用仅返回第一个值(如果没有返回值为nil)。
3). 可以使用圆括号强制使调用返回一个值。

-- 这个部分的规则比较奇怪. 例子比较长, 就不贴出来了, 还是仔细看原文吧.

24.
特殊函数unpack,接受一个数组作为输入参数,返回数组的所有元素。unpack返回a所有的元素作为f()的参数
f = string.find
a = {"hello", "ll"}
print(f(unpack(a))) --> 3 4

25.
可变参数:
Lua函数可以接受可变数目的参数,和C语言类似在函数参数列表中使用三点(...)表示函数有可变的参数。Lua将函数的参数放在一个叫arg的表中,除了参数以外,arg表中还有一个域n表示参数的个数。

26.
如果我们只想要string.find返回的第二个值。一个典型的方法是使用哑元(dummy variable,下划线):
local _, x = string.find(s, p)
-- now use `x'
...


初级语法知识似乎到这里就结束了, 后面的(从第6章再论函数开始)是稍微高级一点的内容了, 或者说是Real world Lua?

没有评论:

发表评论