加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Lua 函数

发布时间:2020-12-14 21:57:25 所属栏目:大数据 来源:网络整理
导读:Lua中的函数参数如果是string或表构造器,则圆括号可以忽略掉。 print "Hello World" -- print("Hello World") dofile 'a.lua' -- dofile ('a.lua') print [[a multi-line -- print([[a multi-line message]] message]] )f{x= 10 ,y= 20 } -- f({x=10,y=20})

Lua中的函数参数如果是string或表构造器,则圆括号可以忽略掉。

print "Hello World"         <--> print("Hello World")
dofile 'a.lua'              <--> dofile ('a.lua')
print [[a multi-line <--> print([[a multi-line message]] message]])
f{x=10,y=20}               <--> f({x=10,y=20})
type{}                      <--> type({})

Lua也提供了一种语法像o:foo(x)同等于o.foo(o,x),将第一个参数自动填写为o。

Lua的实参和形参个数也提供了像多重赋值一样的机制,多余的实参自动被抛弃,多余的形参自动补为nil。

1.返回多个值

s,e = string.find("hello Lua users","Lua")
print(s,e) --> 7 9
function maximum (a)
local mi = 1 -- index of the maximum value
local m = a[mi] -- maximum value
for i = 1,#a do
if a[i] > m then
mi = i; m = a[i]
end
end
return m,mi
end
print(maximum({8,10,23,12,5})) --> 23 3

如果函数调用不是在多重赋值列表中的最后一个非空元素,通常会取函数返回值的第一个值:
foo2返回”a”、”b”则有:

x,y = foo2(),20 -- x="a",y=20

你可以通过原括号,强制接收一个返回结果:

print((foo2())) --> a

由于C语言的可变参数个数函数参数只能接受固定个数的实参,所以可以使用table.unpack()来完成这一任务:

print(table.unpack{10,20,30}) --> 10 20 30
a,b = table.unpack{10,30} -- a=10,b=20,30 is discarded

table.unpack的lua实现如下:

function unpack (t,i,n)
    i = i or 1
    n = n or #t
    if i <= n then
        return t[i],unpack(t,i + 1,n)
    end
end

2.可变参数

function add (...)
    local s = 0
    for i,v in ipairs{...} do
        s = s + v
    end
    return s
end
print(add(3,4,25,12)) --> 54
function fwrite (fmt,...)
return io.write(string.format(fmt,...))
end

pack是lua5.2才有的语法,用于将参数打包:

function nonils (...)
    local arg = table.pack(...)
    for i = 1,arg.n do
        if arg[i] == nil then return false end
    end
    return true
end
print(nonils(2,3,nil)) --> false
print(nonils(2,3)) --> true
print(nonils()) --> true
print(nonils(nil)) --> false

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读