zoukankan      html  css  js  c++  java
  • lua 语句学习

    就如同C里的if else,while,do,repeat。就看lua里怎么用:

    1、首先看if else

    t = {1,2,3}
    
    local i = 1
    
    if t[i] and t[i] % 2 == 0 then
    	print("even")
    else
    	print("odd")
    end

    lua木有C里的&&,而是and来表示;if 之后跟表达式,之后要更个then 最后语句结束都要写end 表示这个chunk结束了。

    2、while

    while t[i] do
    	print(t[i])
    	i = i + 1
    end
    

    3、do end

    do
    	print(t[i])
    	i = i + 1
    end
    

    4、repeat until

    local i = 1
    repeat
    	print(t[i])
    	i = i + 1
    until t[i] == nil

    5、for的使用方法

    for i = 1, #t do
    	print(t[i])
    end
    

    当然for循环里还能够直接调用lua API

    for k,v in pairs(t) do
    	print(k , v)
    end

    6、break使用方法

    for k,v in pairs(t) do
    	print(k , v)
    	if k == 2 then
    	break
    	end
    end

    课后题解答:

    1、lua为毛支持elseif这样的写法

    比方能够这么写:

    for k,v in pairs(t) do
    	if k == 2 then
    		print('111')
    	elseif k == 1 then
    		print(k , v)
    	end
    end

    这样整个if ...end是一个chunk;假设if else分开写,就得这样:

    t = {1,2,3}
    
    
    for k,v in pairs(t) do
    	if k == 2 then
    		print('111')
    	else if k == 1 then
    		print(k , v)
    		end
    	end
    end
    

    多出了一个end。

    由于lua里没有switch,假设选择分支比較多写那么多end非常丑陋,so就能够elseif一起用啦。

    2、写无条件运行代码,假设c里我喜欢用do{}while(false);lua就能够有非常多写法,来个最easy想到的:

    local i = 0
    repeat
    	i = i + 1
    	print(i)
    	if i > 10 then
    		break
    	end
    until false

    3、第三个问题,我已经用第二个解答回答了,在lua里是要用到repeat until来做的。

    4、改动恶心的goto语句,的确看着非常不爽。改了就清爽多了:

    function room1()
    repeat
    	local move = io.read()
    	if move == "south" then
    	return room3()
    	elseif move == "east" then
    	return room2()
    	else
    	print("invalid move")
    	end
    until false
    end
    
    function room2()
    repeat
    	local move = io.read()
    	if move == "south" then
    	return room4()
    	elseif move == "west" then
    	return room1()
    	else
    	print("invalid move")
    	end
    until false
    end
    
    function room3()
    repeat
    	local move = io.read()
    	if move == "north" then
    	return room1()
    	elseif move == "east" then
    	return room4()
    	else
    	print("invalid move")
    	end
    until false
    end
    
    function room4()
    	print("Congratulations, u win!")
    end
    
    room1()
    

    5、goto的限制

    goto不能调到某个语句块内。由于内部是不能为外部所知道的。为毛不能跳出函数块,书里的解释是:

    stackflow的答案是:

    Your guesses are hinting at the answer. The reason is because the goto statement and its destination must reside in the same stack frame. The program context before and after the goto need to be the same otherwise the code being jumped to won't be running in its correct stack frame and its behavior will be undefined. goto in C has the same restrictions for the same reasons.

    6、这道题看到goto就好凌乱,我压根就打算用goto。也驾驭不了介个,so不分析了。


  • 相关阅读:
    P2351 [SDOI2012]吊灯
    洛谷P1450 [HAOI2008]硬币购物 背包+容斥
    P5110 块速递推-光速幂、斐波那契数列通项
    AT2304 Cleaning
    CSP-S 2020
    CF487E Tourists
    P4334 [COI2007] Policija
    动态逆序对专练
    CF437D The Child and Zoo
    CF1032G Chattering
  • 原文地址:https://www.cnblogs.com/mqxnongmin/p/10626452.html
Copyright © 2011-2022 走看看