lua基础语法

Posted traditional

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lua基础语法相关的知识,希望对你有一定的参考价值。

1.从hellowrold开始

1 --语法和Python比较类似,直接像Python一样使用print即可
2 --这里我可以直接写中文,显然被当成了注释。在lua中,两个-表示注释
3 --[[
4     这种形式可以表示多行注释
5 ]]
6 
7 --在lua中,语句后面也可以像Python一样加分号,但也可以不加。
8 print("hello world")

 

 

2.lua的基本类型

  1 --lua和Python一样,并不需要像C一样声明一个变量,因为本身带有值的类型
  2 --直接给变量赋值即可
  3 
  4 --[[
  5 lua的基本类型有:nil(空)
  6               boolean(布尔)
  7               number(数字)
  8               string(字符串)
  9               table(表)
 10               函数等内容后面再说
 11 
 12 ]]
 13 
 14 --[[
 15 注意:赋值的时候,可以将多个语句写在一行,用空格或者;分隔。
 16      这里只是演示,但是实际开发中不建议这么做
 17 ]]
 18 a = 123;b="satori";c=3.14;d=math.pi
 19 --使用type查看值的类型
 20 print(type(a), type(b), type(c), type(d)) -- number    string    number    number
 21 --可以看到,lua中没有什么int float等等,只要是数字,类型通通为number
 22 print(type(print)) -- function
 23 
 24 --如果一个变量我们没有赋值直接使用的话,在Python中会报错,提示name xxx is not defined
 25 --但在lua中不会报错,对于一个没有赋值的变量在lua中默认为nil
 26 --nil用于区别其他变量,给一个全局变量赋值为nil等于删除这个全局变量
 27 print(mmp, type(mmp)) -- nil    nil
 28 
 29 --在lua中,只有false和nil表示假,其他的都表示真。0和空字符串在lua中表示真,这和Python不太一样
 30 
 31 --lua中,字符串一旦创建了,便不可以修改了。这和Python一样,但是在Python中可以使用replace修改并返回一个新的字符串
 32 --那么lua也有类似的方法,该方法同样会得到一个返回值,不会修改原来的值
 33 s1 = "hello cruel world"
 34 s2 = string.gsub(s1, "cruel", "beautiful")
 35 print(s1) -- hello cruel world
 36 print(s2) -- hello beautiful world
 37 
 38 --并且在lua中,可以使用单引号也可以使用双引号
 39 --类似于Python,如果输入的字符串本身有单引号,那么外部就用双引号,反之亦然
 40 print("I‘m satori") --I‘m satori
 41 --如果我非要使用相同的引号,那么可以使用转义字符,将内部的引号进行转义
 42 print(I‘m satori) --I‘m satori
 43 
 44 --[[
 45     一些转义字符
 46     a:响铃
 47     :退格
 48     f:提供表格
 49     
:换行
 50     
:回车
 51     	:制表  ]]
 52 print("i am 
 satori, come from 
东方地灵殿")
 53 --[[
 54  satori, come from
 55 东方地灵殿   ]]
 56 
 57 --字符串也可以使用加上三位数字表示,就是相应的ascii表
 58 print("65")  --A
 59 
 60 -- 如果想表达多行字符串,可以使用[[ ]],类似于Python中的三引号‘‘‘  ‘‘‘
 61 s3 = [[
 62     南村萝莉欺我老无力
 63   经常与我发生性
 64           关系
 65 ]]
 66 print(s3)
 67 --[[
 68     南村萝莉欺我老无力
 69   经常与我发生性
 70           关系
 71 ]]
 72 
 73 --如果一个字符串和一个数字进行运算的话,那么会尝试将字符串转化成数字
 74 --显然字符串必须是由数字组成,如果包含不是数字的字符,就会报错,无法转化
 75 print("666"+1) --667
 76 
 77 --字符串的连接,在lua中..表示字符串连接
 78 --不可以使用"a"+"b"这样的形式,这在Python中是允许的,但在lua中不可以。但可以使用..
 79 s4 = "  satori"
 80 print("a".."b"..s4) --ab  satori
 81 print("1".."+".."1".." == ".."2") -- 1+1 == 2
 82 
 83 -- 如果我想获取一个字符串的长度该怎么办呢?在Python中使用len函数,但在lua中使用#。
 84 -- 而#在Python中表示注释,因此两门语言某些地方类似,某些地方又完全不同,确实很有意思
 85 print(#"我随随便便一写就是标准的十五字") -- 45
 86 -- 输出结果为45,咦,不是15吗?肯定一眼就找出答案了,一个汉字占三个字节
 87 -- 而且lua默认用的是utf-8编码。值得一提的是,在Python中使用len函数计算出来的结果为15
 88 -- 因为在Python中,len计算的是字符数,而不是字节数。
 89 -- 而且在go语言中,计算的结果也为45,同样是字节。如果想得到字符数,在go中需要用[]rune转化一下。
 90 s6 = "mmp"
 91 print(#s6) -- 3
 92 
 93 -- lua中还有一种叫做table的类型,说白了就是Python中的字典(哈希表),key和value一一对应
 94 hash_map = {}
 95 hash_map["satori"] = "东方地灵殿"
 96 print(hash_map["satori"]) -- 东方地灵殿
 97 -- 将hash_map赋值给别的变量,并且将hash_map删除
 98 hash_map_1 = hash_map
 99 hash_map = nil
100 print(hash_map) -- nil
101 print(hash_map_1["satori"]) -- 东方地灵殿
102 -- 可以看到即使删除了hash_map,但不会对hash_map1造成影响
103 -- lua的垃圾回收类似于Python当中的引用计数,当hash_map1也赋值为nil,没变量再引用的时候就会删除垃圾资源
104 --如果访问一个不存在的key,那么得到的会是nil
105 x = {}
106 x[1] = 2
107 x[2] = 3
108 print(x[1], x[2], x[3])  -- 2    3    nil
109 --想删除table中某个元素,直接赋值为nil即可
110 x[1] = nil
111 print(x[1])  -- nil
112 -- 而且table这种结构,还可以使用.来访问
113 x.name = "satori"
114 print(x.name)  -- satori

 

以上是关于lua基础语法的主要内容,如果未能解决你的问题,请参考以下文章

lua基础语法

Lua脚本语言——基础语法

Lua特性和一些基础语法总结(Lua入门到精通一)

lua的基本语法

lua 触动精灵基础语法

Lua从青铜到王者基础篇第二篇:Lua基本语法和数据类型