lua学习笔记05

函数:

函数有两种用途:1.完成指定的任务,这种情况下函数作为调用语句使用;2.计算并返回值,这种情况下函数作为赋值语句的表达式使用。

语法:

function func_name (arguments-list)

statements-list ;

end ;

调用函数的时候,如果参数列表为空,必须使用()表明是函数调用。

但是,这个规则有一个例外,当函数只有一个参数并且这个参数是字符串或者表构造的时候,()是可选的。

Lua也提供了面向对象方式调用函数的语法,比如:o:foo(x)o.foo(x)是等价的。

Lua使用的函数可以使Lua编写的也可以使其他语言编写,对于Lua程序员来说用什么语言实现的函数使用起来都一样。

Lua函数实参和形参的匹配与赋值语句类似,多余部分被忽略,缺少部分用nil补足

返回多个结果值

Lua函数可以返回多个结果值,比如string.find,其返回匹配串“开始和结束的下标,如果不存在匹配串则返回nil


s,e = string.find("hello lua users","lua") ;

print(s,e)

Lua函数中,在return后列出要返回的值得到列表即可返回多值。

function maximum(a)
	local mi = 1
	local m = a[mi]
	for i,val in ipairs(a) do
		if val > m then
			mi = i
			m = val
		end
	end
	return m,mi
end

print(maximum({8,10,23,12,5}))

Lua总是调整函数返回值的个数去适应调用环境,当做为一个语句调用函数时,所有返回值被忽略。

当做为表达式调用的时候,有以下几种情况:

1.当调用作为表达式最后一个参数或者仅有一个参数时,根据变量个数尽可能多的返回多个值,不足补nil,超出舍去。

2.其他情况,函数调用仅返回一个值(如果没有返回值为nil

函数调用作为函数参数被调用的时候和多值赋值是相同的。

函数调用在表构造函数中初始化,和多值赋值时相同。

另外,return f() 这种类型的返回 f()返回的所有值

可以使用圆括号强制使调用返回一个值

一个return语句如果使用圆括号括起来也将导致返回一个值。

function foo0 () end
function foo1() return 1 end
function foo2() return 2,3 end

x,y = foo2()
print(x,y)
x,y = nil ,nil
x = foo2()
print(x,y)
x,y,z = nil,nil,nil
x,y,z = 10,foo2()
print(x,y,z)

x,y,z = nil
x,y = foo0()
print(x,y)
x,y,z = nil
x,y = foo1()
print(x,y)
x,y,z = nil
x,y,z = foo2()
print(x,y,z)
x,y,z = nil
x,y,z = 20,foo2()
print(x,y,z)
x,y,z = nil
x,y = foo0(),20,30
print(x,y)


print(foo0())
print(foo1())
print(foo2())
print(foo2(),1)
print(foo2() .. "x")


a = {foo0()}
a = {foo1()}
a = {foo2()}


a = {foo0(),foo2(),2}



function foo(i)
	if i == 0 then return foo0()
	elseif i == 1 then return foo1()
	elseif i == 2 then return foo2()
	end
end

print(foo(1))
print(foo(2))
print(foo(0))
print(foo(3))

print((foo(0)))
print((foo(1)))
print((foo(2)))




 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值