Lua语言快速入门(1)

329 阅读3分钟

前言

H同学本来是做Java后端开发的,因为项目需要,所以需要学习 Lua 和 erlang 这两种语言。对于之前并没有接触过这块的人来说,还是走出了自己的舒适区的。

lua作为一种脚本语言,和现在流行的python很像,所以如果有相关经验的话,其实还是比较好接受的。

语法入门

输出

print("hello world!")

这里,每行结束并没有强制使用 分号";"来作为结尾,默认换行就是一行的结束

注释

  • “--” 作为单行注释

--这是单行注释

  • “--[[XXXXXX]]”作为多行注释

--[[

多行注释

--]]

这里有个注意点,多行注释的时候,在一行使用三个减号,即“---”就是取消多行注释,这是比较方便的一个点

标识符

这块的话几个语言基本都是差不多的,就不列举了,感兴趣的话可以自己去看看。

变量

  • 默认变量都是全局变量
  • 局部变量则使用 local 进行修饰
  • 所有变量再一开始都是nil,未声明的时候直接使用就是nil
  • 不需要声明变量的类型,这点和python一样,对变量重新复制,其类型就自动转换成新的类型,和Java等强类型语言不同

数据类型

  • nil 空,在条件表达式里面等效于false,type(nil)是字符串类型的
  • boolean 布尔类型,为 true 和 false
  • number 双精度类型的实浮点数,没有 int 和 double 这些,就是 number 类型
  • string 字符串类型,用引号括起来.对于跨越多行的字符串,也可以使用[[xxx]]括起来。另外,还需要注意,对于数字的字符串,会自动转换成number类型。字符串之间可以用 .. 进行连接,类型会自动转换,这点和java等类似。井号#可以获取字符串的长度strLen = #"string"
  • userdata 表示任意存储在变量中的C数据结构
  • thread 表示执行的独立线路,用于执行协同程序,在协同程序的时候使用
  • table 其实是一个"关联数组"(associative arrays),有点像是Python的字典,但又有点区别,用{}表示。

table

我觉得有点像是数组和字典的结合,可以没有key,默认索引从1开始。

    tab = {"阿里","腾讯","京东"}
    for key, val in pairs(tbl) do  -- 这里的迭代可以先看着
        print("Key", key)
    end
    -- [[ 
        返回的结果
        Key	1
        Key	2
        Key	3
    ]]

我们也可以指定其键值对,就像map一样。

tab = {key1="阿里",key2="腾讯",key="京东"}
for key, val in pairs(tab) do  -- 这里的迭代可以先看着
    print(key .. " - " .. val)
end
-- [[ 
        返回的结果
        key1 - 阿里
        key - 京东
        key2 - 腾讯
    ]]

我们还可以混合使用,下面给大家看一个有趣的:

tab1 = { key1 = "val1", key2 = "val2", "val3", "val4", 6}
tab1[5] = "val5"
for k, v in pairs(tab1) do
    print(k .. " - " .. v)
end
print("tab1的长度为:"..#tab1)
print("======")
tab1[4] = 1
for k, v in pairs(tab1) do
    print(k .. " - " .. v)
end
print("tab1的长度为:"..#tab1)
-- [[ 
        返回的结果
        1 - val3
        2 - val4
        3 - 6
        5 - val5
        key2 - val2
        key1 - val1
        tab1的长度为:3
        ======
        1 - val3
        2 - val4
        3 - 6
        4 - 1
        5 - val5
        key2 - val2
        key1 - val1
        tab1的长度为:5
    ]]

从上面可以看出几点:

  • 可以混用,毕竟对于没有指定key的会默认使用数字,且从1开始
  • 可以通过tab[x] = xx的方式来赋值
  • #tab计算长度的时候,是根据数字key来给出的,并且一旦值为nil就断了。所以一开始因为是1-3,然后4不存在,5虽然存在也直接输出了3.在给出4的值之后,就输出长度为5

这里还有坑,就是当指定的key,那么我们可以使用tab1.key1来获取值,但是不能tab1.1这种。