第五章 函数 Lua程序设计笔记

Posted LeoSirius

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第五章 函数 Lua程序设计笔记相关的知识,希望对你有一定的参考价值。

--第五章 函数
若函数只有一个参数,并且此参数时字符串或table,则圆括号可有可无

print "hello world" <--> print("hello world")
f {x = 10, y = 20} <--> f ({x = 10, y = 20})

 

--5.1多重返回值

function foo0 () end
function foo1 () return "a" end
function foo2 () return "a", "b" end


1当函数调用作为一条单独的语句时,会丢弃所有返回值。
2将函数作为表达式的一部分使用时,会保留函数的第一个返回值。
3将函数作为一系列表达式中的最后一个参数使用时,才能获得它的所有值。

x,y = foo2(), 20  -- x = "a", y = 20 不是最后一个
print(foo2())  -->a b  是最后一个
print(foo2(),1)  --> a 1  不是最后一个

 

table构造式可以接受所有的值,这是也必须是最后一个

t = {foo0()} -- t = {}
t = {foo1()} -- t = {"a"}
t = {foo2()} -- t = {"a", "b"}
t = {foo0(),foo2(),4} -- t[1] = nil, t[2] = "a", t[3] = 4   不是最后一个

 

将一个函数调用放入一对圆括号中,迫使他返回一个值:

print((foo0())) -- nil
print((foo1())) -- a
print((foo2())) -- and

 

unpack函数,接受一个数组参数,并返回其所有元素

print(unpack{10,20,30})  --> 10,20,30
a,b = unpack{10,20,30}  -- a = 10, b = 20, 30被丢弃

 

 

--5.2变长参数

function add(...)
local s = 0
for i,v in ipairs{...} do 
    s = s+v
end
return s
end

print(add(1,2,3,4,5,6))

参数列表中的三个点表示该参数可以接受不同数量的实参

 

--5.3具名实参
例如在一个GUI库中,一个用于创建新窗口的函数可能会具有很多参数,其中大部分都是可选的
使用具名实参:

w = Window{x = 0, y = 0, width = 300, height = 200, 
            title = "Lua", background = "blue",
            border = true
}

函数:(_Window才是真正调用创建窗口的函数)

function Window(options)
    if type(options.title) ~= "string" then 
        error("no title")
    elseif type(options.width) ~= "number" then
        error("no width")
    elseif type(options.height) ~= "numer" then 
        error("no height")
    end
    
    --其他参数时可选的
    _Window(options.title,
            options.x or 0,  --默认值
            options.y or 0,
            options.width, options.height,
            options.background or "white",
            options.border    --默认为false(nil)
        )
end

 

以上是关于第五章 函数 Lua程序设计笔记的主要内容,如果未能解决你的问题,请参考以下文章

数据库系统概念笔记——第五章:高级SQL

JavaScript高级程序设计(第3版)第五章读书笔记

第一行代码笔记-第五章

阅读笔记《C程序员 从校园到职场》第五章 内存操作

Programming In Lua 第五章

2017-2018-1 20179215 《从问题到程序》第五章