Lua笔记1

Lua语法

1.注释 --
2.默认全局变量,不需要声明。删除变量赋值为nil
  Lua 中的变量全是全局变量,哪怕是语句块或是函数里,除非用 local 显式声明为局部变量。
  动态类型语言
3.8个基本类型nil、boolean、number、string
             userdata、function、thread、table
4.nil作比较加双引号 type(x)=="nil"
5.false和nil为false,其余都是true。0也是true。
6.字符串由一对单引号或双引号表示。
  也可以用两个方括号表示“[[]]”
7.数字字符串算术操作,会自动转化为数字进行算术运算。
  字符串连接使用“..”
8.table是关联数组,索引可以是数字或字符串。
  索引可以使用方括号[]。当索引为字符串时可以使用“.”。

-- table_test.lua 脚本文件
a = {}  
a["key"] = "value"  
key = 10  
a[key] = 22  
a[key] = a[key] + 11  
for k, v in pairs(a) do  
    print(k .. " : " .. v)  
end  

9.默认起始索引以1开始。
10.table不会固定长度大小,会自动增长。
11.函数可以存在变量里。

-- function_test.lua 脚本文件
function factorial1(n)
    if n == 0 then
        return 1
    else
        return n * factorial1(n - 1)
    end
end
print(factorial1(5))
factorial2 = factorial1
print(factorial2(5))

12.function可以匿名函数的方式通过参数传递:

-- function_test2.lua 脚本文件
function testFun(tab,fun)
        for k ,v in pairs(tab) do
                print(fun(k,v));
        end
end


tab={key1="val1",key2="val2"};
testFun(tab,
function(key,val)--匿名函数
        return key.."="..val;
end
);

13.local 表局部变量,访问局部变量比全局变量快
14.多个变量可同时赋值

a, b = 10, 2*x       <-->       a=10; b=2*x

  会先计算右边所有的值然后再执行赋值操作

x, y = y, x                     -- swap 'x' for 'y'
a[i], a[j] = a[j], a[i]         -- swap 'a[i]' for 'a[j]'

  变量个数与值个数不一致

a. 变量个数 > 值的个数             按变量个数补足nil
b. 变量个数 < 值的个数             多余的值会被忽略

  经常用于交换变量或函数返回多个值情况:

a, b = f()    --f()返回两个值,第一个赋给a,第二个赋给b。

15.有goto语句
16.函数返回多个值,可以以“,”分开。
17.函数参数为可变参数时,用“...”代替,固定参数必须放在可变参数之前。
   可变参数可以赋给一个变量。

local arg={...}    --> arg 为一个表,局部变量
select("#",...)    --获取可变参数的数量
select(n, …)       --数字n,那么select返回它的第n个可变实参

18.不等号“~=”
19.逻辑运算符:and、or、not
20.计算表或字符串长度的运算符#

#"Hello"       --返回 5

21.换行 \n
22.lua是由c实现
23.lua隶属于脚本语言,嵌入其他程序中。
24.goto语句 + 标签(::tag_1::)
代替continue:

for i = 0, 5, 1 do
    if( xxxxxx ) then
        goto tag_1
    end
    --循环体
    
    ::tag_1::
end

25.for循环遍历table(多个值),不想用“_”变量名替代
26.require加载模块,模块名不一定以文件名命名,也可以是文件夹名。和lua调取文件机制(菜鸟教程有详细调取路径)有关系。
27.require、dofile、loadfile区别
28.“.”和“:”区别:
girl.goToMarket(girl,100) 等同于 girl:goToMarket(100)
可以看出,冒号定义和冒号调用其实跟上面的效果一样。把第一个隐藏参数省略了,而该参数self指向调用者自身

注释:使用markDown编辑。

posted @ 2020-06-04 15:16  风影我爱罗  阅读(180)  评论(0编辑  收藏  举报