说明:Lua学习笔记的内容都是《Lua程序设计.第二版》的读书笔记,笔记中很多内容都是来自于书中
1.函数参数
1)无论函数的哪种用法都要将所有参数放到一对圆括号中。即使调用函数时没有参数,也必须写出一对空括号。对于此规则只有一个中特殊的例外情况:一个函数若只有一个参数,并且此参数是一个字面字符串或是table构造式,那么可以不用括号,例如:
1 2 3 4 5 6 | print "HW" <--> print("HW") dofile 'a.lua' <--> dofile(a.lua) print [[a multi-line message]] f{x=10, y=20} type{} |
2.函数的多重返回值,这点和其他很多语言不一样,lua中的函数可以有多个返回值,在return 后面用逗号将多个返回值隔开即可
1)如果一个函数调用不是一系列表达式的最后一个元素,那么只产生一个值,如果函数没有返回值则是nil,
1 2 3 4 | function foo0() end function foo2() return "a", "b" end x, y = foo2(), 20 -- x= "a", y = 20 x,y = foo0(), 20, 30 -- x = nil ,y=20,30被X掉了 |
2)如果一个函数调用是一系列表达式的最后一个元素,那么则按多重赋值的方式处理
3)table构造式可以完整的接受函数调用的结果,前提是table构造式的最后一个表达式
4)使用()强制函数只返回一个值
5)return f()返回f的所有返回值
3.可变参数
1)简单的例子,…为一个表达式,行为类似于一个多个返回值的函数
1 2 3 4 5 6 7 | funtion add(...) local s = 0 for i,v in ipais{...} do s = s + v end return s end |
2)funtion foo(…) return … end是一个“多值恒定试”可以用于跟踪(trace)可变参数函数的可变参数,例:
1 2 3 4 | function foo1(...) print("calling foo:", ...) return foo(...) end |
3)通常使用表达式{…}就可以遍历变长参数,如果可变参数列表中有nil,则使用select来访问可变参数列表
1 2 3 4 | for i = 1, select('#', ...) do local arg = select(i, ...) -- 得到第i个参数 --do sth end |
4.具名参数,lua并不存在像python那样的具名参数,使用的是函数参数不用括号的规则之一,table构造式来变相的使用具名参数,例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | w = Window{x = 0, y=0, width=300,height=200, title="lua", background="blue", border = true} function Window(option) --检查必要参数 if type(option.title) ~= "string" then error("no title") elseif type(option.width) ~= "number" then error("no width") elseif type(option.height) ~= "number" then error("no height") end --其他参数都是可选的 _Window(option.title, option.x or 0, option.y or 0, option.width, option.height, options.background or "white", options.border -- 默认为false(nil) ) end |
最近评论