zoukankan      html  css  js  c++  java
  • Lua 基础 -- 学习笔记

    标签(空格分隔): Lua


    1. Lua可以一次性给多个变量赋值

    • 变量比赋值多,多的变量就赋值nil
    • 变量比赋值少,多的赋值舍弃
    local a, b, c = 1, 2, 3
    print( a, b, c)
    local a, b, c = 1, 2
    print(a, b, c)
    local a, b, c = 1, 2, 3, 4
    print(a, b, c)
    
    输出:
    1	2	3
    1	2	nil
    1	2	3
    

    2. lua代码块

    do ... 
    end
    

    3.lua控制语句

    3.1 条件判断

    if ... then
    ...
    elseif ... then
    ...
    else
    ...
    end
    

    3.2 循环迭代
    3.2.1 repeat ... until true --> 条件成立退出

    local a = 1
    repeat
    	print(a)
    	a = a + 1
    until a >= 2
    
    输出:1
    

    3.2.2 while ... do ... end --> 条件不成立退出

    local i = 1
    while i < 3 do
    	print(i)
    	i = i + 1
    end
    
    输出:
    1
    2
    

    3.2.3 for from, to, step do ... end step可以省略,默认不写的话是每次加1

    for i=1, 2 do
    	print(i)
    end
    
    -- 上下程序作用一样
    for i=1, 2, 1 do
    	print(i)
    end
    
    输出:
    1
    2
    1
    2
    

    3.2.4 迭代函数ipairs 和pairs,ipairs只针对有序表,其中ipairs循环中如果遇到nil,循环就结束了

    local list = {1, 2, 3, a = 12, b = 14}
    for i,v in ipairs(list) do
    	print(i, v)
    end
    
    输出:
    1	1
    2	2
    3	3
    
    local list = {1, 2, 3, a = 12, b = 14}
    for i,v in pairs(list) do
    	print(i, v)
    end
    
    输出:
    1	1
    2	2
    3	3
    a	12
    b	14
    
    local list = {1, nil, 2, 3, a = 12, b = 14}
    for i,v in ipairs(list) do
    	print(i, v)
    end
    
    输出:
    1	1
    

    4. function

    4.1 闭包函数

    function closureFunction(x)
    	return function ()
    		x = x + 1
    		print(x)
    	end
    end
    
    local f = closureFunction(100)
    print(f())
    print(f())
    print(f())
    local ff = closureFunction(200)
    print(ff())
    
    输出:
    101
    102
    103
    201
    

    只要f没有销毁,x值就变相的成为全局变量(相对于f调用),如果是重新调用closureFunction还是原来的值

    4.2 函数尾调用

    • 形式:就是在函数的最后返回处返回函数
    • 作用:可以解决例如递归时堆栈过大问题,因为尾调用的一个性质就是直接进入尾调用函数的堆栈并且抛弃现在在使用函数的堆栈,也就是说,进入尾调用函数后是不会恢复上一个函数的堆栈的
    function closureFunction(x)
    	return function ()
    		x = x + 1
    		print(x)
    	end
    end
    
    local function recursionFunction( x )
    	if x > 1 then
    		return recursionFunction(x - 1)
    	else
    		return print('done')
    	end
    end
    
    recursionFunction(99999)
    

    4.3 函数的不定参数

    function functionName( ... )
    ---[=[ 
    	print(#arg)
    	print(unpack(arg))
    --[[	local list = {...}
    	print(#list)
    	print(unpack(list))
    	for i=1,#list do
    		print(list[i])
    	end
    --]]
    --]=]
    end
    
    functionName(1, 2, 3)
    end
    

    以上是不定参数的两种不同读取参数方法,#是用来获取字符长度或者表长度(只限于有序表)

    4.4 .和:的区别

    local list = {}
    
    function list.say( helloworld )
    	print(helloworld)
    end
    
    list.say("helloworld")
    
    
    local list = {}
    
    function list:say( helloworld )
    	print(helloworld)
    end
    
    list:say("helloworld")
    list.say("do","helloworld")
    

    区别在于 函数参数开始时,:比.多传递了一个参数
    :定义的函数可以用.来访问,.定义的函数如果用:访问一般会产生问题

    5. lua中的三目运算实现

    local a = 5
    a = a > 4 and a or 1
    print(a)
    
    输出:
    5
    

    注意:a不能是nil或者false

  • 相关阅读:
    UML 类之间的关系
    [noi.ac省选模拟赛]第11场题解集合
    [CF1270F]Awesome Substrings
    [noi.ac省选模拟赛20200606]赌怪
    FFT,NTT入门
    [AHOI2017/HNOI2017]单旋
    [HNOI2016]最小公倍数
    [HNOI2016]树
    [HNOI2016]大数
    服务外包概论课程资料
  • 原文地址:https://www.cnblogs.com/zjzyh/p/4568407.html
Copyright © 2011-2022 走看看