设为首页 加入收藏

TOP

Lua 基础之函数
2019-05-11 00:27:42 】 浏览:48
Tags:Lua 基础 函数
版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/xingxinmanong/article/details/75220240

函数定义

lua 有两种定义函数的方法

function max(a, b)
    return a > b and a or b
end

min = function(a, b)
    return a < b and a or b
end

print(max(10, 20))
print(min(10, 20))

形参与实参

lua 函数的实参个数可以与形参不一致,实参少了则后面的参数为 nil,实参多了则舍弃多余的

min = function(a, b)
    a = a or 1
    b = b or 2
    return a < b and a or b
end

print(min(5, 6, 7))
print(min(5, 6))
print(min(5))
print(min())

多重返回值

lua 函数可以返回多个返回值
* 只有当函数调用作为表达式的最后一个元素时才能返回多个值,否则就只有一个返回值
* 接收多个返回值和多重赋值、函数接收实参一样,少的赋 nil,多的舍弃
* 把函数调用放到一对()里面,可以迫使函数只返回一个值
* unpack 函数可以将一个数组中从 1 开始的元素取出来,5.1 之前unpack是全局函数,5.2 开始移到 table 下了

double = function(a, b, c)
    a = a or 1
    b = b or 2
    c = c or 3
    return a * 2, b * 2, c * 2
end

-- 多舍弃少补nil
x, y, z = double()
print(x, y, z)
a, b, c, d = double(10, 11, 12)
print(a, b, c, d)
m, n = double()
print(m, n)

-- 函数调用必须在表达式最后才能接收所有返回值
x, y, z = nil, nil, nil
x, y, z = double(), 10
-- 输出 2 10 nil
print(x, y, z)
-- 输出 2 10
print(double(), 10)
t = {double()}
-- 输出 3
print(#t)
t = {double(), 10}
-- 输出 2
print(#t)

function foo()
    return double()
end

function foo2()
    return double(), 10
end

-- 输出 2 4 6
print(foo())
-- 输出 2 10
print(foo2())
-- 输出 2
print((foo()))

t = {double()}
print(t)
print(table.unpack(t))

变长参数

  • 使用 … 表示可变参数
  • 固定参数要在可变参数前面
  • lua5.1 之前可直接把 … 当成数组处理,5.2 之后必须先手动转成数组
  • 如果变长参数中有 nil 值,必须使用 select 来获取参数的个数;select 函数第一个参数传入 n 时会返回变长参数的第 n 个元素,传入 ‘#’ 则会返回变长参数的个数
add = function(...)
    local sum = 0
    local arg = {...}
    for i, v in ipairs(arg) do
        sum = sum + v
    end
    return sum
end

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

foo = function(...)
    local n = select(2, ...)
    local count = select('#', ...)
    return n, count
end

print(foo(1, 2))

具名参数

  • lua 函数实参位置与形参位置要一一对应,函数不支持字典型的参数,如foo(x = 10, y = 10)是不合法的
  • 如果要使用具名参数,即在调用函数时给每个参数一个 key 和 value,可以使用 table 的方式。把函数的参数设计成只有一个 table,然后 table 里面的值就可以指定键值了
-- print(x = 10, y = 10) -- error

oldPrint = print

print = function(arg)
    local x = arg.x or 1
    local y = arg.y or 1
    local str = "x = " .. x .. "  y = " .. y
    oldPrint(str)
end

print({x = 10, y = 10})
print({y = 100})
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Java为什么会引入及如何使用Unsafe 下一篇java线程

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目