lua基础语法篇一

打印 上一主题 下一主题

主题 921|帖子 921|积分 2763

打印
  1. print("hello world")
复制代码
注释


  • 单行注释
  • 多行注释
  1. -- 这是单行注释
  2. --[[
  3. 这是多行注释
  4. ]]
复制代码
赋值
  1. s="Hello World"
  2. -- 多重赋值
  3. a,b="String a","String b"
  4. -- 交换值,类似python
  5. a,b="String a","String b"
  6. a,b=b,a
复制代码
数据类型

Lua有8种基本类型,如下表
类型说明nil空值,只包含一个nilboolean布尔类型number数值类型string字符串,用单引号或双引号表示tableLua中的表,其实是一个关联数组,数组的索引可以是数字、字符串或表类型function函数,由C或Lua编写的函数userdata表示存储在变量中的c数据结构thread线程类型,表示执行的独立线路,用于执行协同程序
  1. print(type("Hello world"))      --> string
  2. print(type(10.4*3))             --> number
  3. print(type(print))              --> function
  4. print(type(type))               --> function
  5. print(type(true))               --> boolean
  6. print(type(nil))                --> nil
  7. print(type({}))                 --> table
  8. print(type(io.stdin))           --> userdata
复制代码
nil(空)

nil表示一种没有任何有效值
  1. print(type(a))
复制代码
给全局变量和table中某一变量赋值为nil,等同于删除掉。
boolean(布尔)


  • boolean类型只有两个可选值,true(真)和false(假)。
  • 在Lua中,false和nil是假,其他的都为真。
number(数字)

Lua默认只有一种number类型,类似C语言中的double(双精度)
string(字符串)

字符串由一对双引号或单引号表示。
  1. -- 字符串有以下四种表示方式
  2. s='string'
  3. s="String"
  4. s=[[String]]
  5. s=[==[String]==]
复制代码
字符串连接采用..操作符
  1. print("a".."b")
  2. -- ab
复制代码
使用#放在字符串前面来计算其长度,如下:
  1. s="Hello world"
  2. print(#s)
  3. --11
复制代码
table(表)
  1. -- 创建一个空的表
  2. local tb={}
  3. -- 初始化表
  4. local tb1={"a","b","c"}
复制代码

  • 不同于其他语言,Lua的索引从1开始
  • table不会固定大小,新增数据table长度自动增加,没初始化的table都是nil
function(函数)

在 Lua 中,函数是被看作是"第一类值(First-Class Value)",函数可以存在变量里:
  1. function factorial1(n)
  2.     if n == 0 then
  3.         return 1
  4.     else
  5.         return n * factorial1(n - 1)
  6.     end
  7. end
  8. print(factorial1(5))
  9. factorial2 = factorial1
  10. print(factorial2(5))
复制代码
function 可以以匿名函数(anonymous function)的方式通过参数传递:
  1. function anonymous(tab, fun)
  2.     for k, v in pairs(tab) do
  3.         print(fun(k, v))
  4.     end
  5. end
  6. tab = { key1 = "val1", key2 = "val2" }
  7. anonymous(tab, function(key, val)
  8.     return key .. " = " .. val
  9. end)
复制代码
thread(线程)

在 Lua 里,最主要的线程是协同程序(coroutine)。它跟线程(thread)差不多,
拥有自己独立的栈、局部变量和指令指针,可以跟其他协同程序共享全局变量和其他大部分东西。
线程跟协程的区别:线程可以同时多个运行,而协程任意时刻只能运行一个,
并且处于运行状态的协程只有被挂起(suspend)时才会暂停。
userdata(自定义类型)

userdata 是一种用户自定义数据,用于表示一种由应用程序或 C/C++ 语言库所创建的类型,
可以将任意 C/C++ 的任意数据类型的数据(通常是 struct 和 指针)存储到 Lua 变量中调用。
变量

Lua 变量有三种类型:

  • 全局变量默认情况下,Lua中所有的变量都是全局变量
  • 局部变量使用local显式声明在函数内的变量,以及函数的参数,都是局部变量。在函数外即使用local去声明,它的作用域也是当前的整个文件,这相当于一个全局变量。
  • 表中的域
注意,变量的默认值均为nil。Lua语言不区分未初始化变量和被赋值为nil的变量,因此全局变量无须声明即可使用。「在Lua中,应尽可能使用局部变量」,这有两个好处:

  • 避免命名冲突
  • 访问局部变量的速度比全局变量更快
  1. a = 5               -- 全局变量
  2. local b = 5         -- 局部变量
  3. function joke()
  4.     c = 5           -- 全局变量
  5.     local d = 6     -- 局部变量
  6. end
  7. a, b, c = 0, 2, 7   -- Lua支持多变量赋值
复制代码
本文由【产品经理不是经理】gzh同步发布,欢迎关注

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

惊雷无声

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表