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

每日一Lua(2)-语句

发布时间:2020-12-14 22:17:40 所属栏目:大数据 来源:网络整理
导读:1.局部变量 局部变量的声明关键字:local. 局部变量的作用域是声明块,指的是函数体,或者是一个chunk。 例子: local a,b=1,10if ab thenprint(a)local aprint(a)endprint(a,b) 可以用do..end语言来控制局部变量的作用域,例如求解二元一次方程二元一次: a,

1.局部变量

局部变量的声明关键字:local.

局部变量的作用域是声明块,指的是函数体,或者是一个chunk。

例子:

local a,b=1,10
if a<b then
	print(a)
	local a
	print(a)
end
print(a,b)



可以用do..end语言来控制局部变量的作用域,例如求解二元一次方程二元一次:

a,b,c=1,4,1
do
	local a2=2*a
	local delta=(b^2-4*a*c)^(1/2)
	x1=(-b+delta)/a2
	x2=(-b-delta)/a2
end
print(x1,x2)

a2和delta都声明为局部变量,在chunk运行结束之后思动销毁。

在Lua中应当尽可能地去使用local声明,因为:

1)可以不影响全局成员的情况下重复使用变量名;

2)使用局部变量会更快一些;

3)当局部变量的chunk代码执行完毕,局部变量就会自动释放被占用的内存。

还有一个常用的用法就是:

local foo=foo

这样做的用处是:保护全局变量不被修改;快速访问。


2.流程控制

首先要注意一点:除nil和false之外的所有值在判断中都为真,包括0和空字符。

lua中的流程控制主要包括if,while,repeat,各举一例。

if,简单的计算器

print("Input a Formula with two number:")
s=io.read()
a=string.sub(s,1,1)
b=string.sub(s,3,3)
op=string.sub(s,2,2)

if op == "+" then
r = a + b
elseif op == "-" then
r = a - b
elseif op == "*" then
r = a*b
elseif op == "/" then
r = a/b
else
error("invalid operation")
end
print(s.."="..r)

while,遍历数组求最大值
a={3213,132,25}
local i=1
max=a[1]
repeat
	print(a[i])
	if max<a[i] then max=a[i] end
	i=i+1
	until a[i]==nil
print("max:"..max)


repeat,改写上面的吧(感觉就是c中的do...while,先执行再判断)

a={1,23,45,64,25}
local i=2
max=a[1]
while a[i] do
	print(a[i])
	if max<a[i] then max=a[i] end
	i=i+1
end
print("max:"..max)

3.两种for循环

lua中的阿for循环有两中,numeric for 和generic for

numeric for的基本形式是:

for var=exp1,exp2,exp3 do
       <something>
end
exp1是起点,exp2是终点,exp3是步长,可以不写,默认的话为1。

要注意两点:1)三个表达式都只计算一次;2)循环控制变量是局部变量,循环结束之后自动销毁;3)不要试图在循环中改变循环控制变量,结果是不可预测的;4)跳出for循环用break。

generic for是通过迭代器的方式遍历所有元素,例如打印数组:

days = {"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}
for k,v in pairs(days) do print(k..":"..v) end


下面是一个插入排序的例子:

a={2,321,23123,32,11}
--for i=1,5 do
--	a[i]=io.read()
--end
for i=1,5 do
	k=i
	for j=i+1,5 do
		if a[k]>a[j] then
		k=j
		end
	end
	tmp=a[i]
	a[i]=a[k]
	a[k]=tmp
end
print("After Sort:");
for i=1,#a do
	print(a[i])
end



4.break和return

break语句用来退出当前循环(for、repeat、while)。在循环外部不可以使用。 return用来从函数返回结果,当一个函数自然结束时,结尾会有一个默认的return。 Lua语法要求break和return只能出现在block的结尾一句(也就是说:作为chunk的最后一句,或者在end之前,或者else前,或者until前)

(编辑:李大同)

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

    推荐文章
      热点阅读