Lua学习笔记(基础篇)

来源:互联网 发布:网络订票退票手续费 编辑:程序博客网 时间:2024/05/16 15:39

  • 变量命名
  • 数据类型
  • 基础语法
    • 快速赋值
    • nil
    • 作用域
      • 组块
  • 常用运算符
    • 比较运算符
    • 字符串运算符
    • 转义字符
    • 逻辑运算符
      • and与
      • or或
      • not非

变量命名

  变量名和标识符必须以下划线或字母开头。名称的本身不能包含有除字母、数字或下划线之外的其它字符。变量名区分大小写。变量名不得为Lua中的关键字。
  Lua中的关键字:and、break、do、else、elseif、false、for、function、if、in、local、nil、not、or、repeat、return、then、true、until和while。

数据类型

关键字 类型 说明 举例 number 数字 所有的数字,包括16进制数和使用科学计数法的数 1e5,0xFF1A string 字符串 一个字符序列 “Hello” boolean 布尔值 真(true)和假(false) true,false function 函数 可以调用的语句集合 table 表 传统的哈希表和数组的混合类型 thread 线程 可用于异步计算的协同程序(有限的轻量线程) userdata 用户数据 主语言中所定义的传统的数据结构包装器
  • 注:字符串后直接接数字可讲数字强转为字符串。
print(type("test string"..4))

运行结果:string

基础语法

  程序猿注意:Lua语言中不以分号作为语句结尾。
  string.len()中string和len之间的英文句号意味着这个指定的函数是名称空间string中的一部分。

快速赋值

  赋值运算符允许一个变量列出现在左边,而一个值的列表出现在右边。如果运算符左边的变量个数比右边的值的个数要多,那么剩下的变量将会被赋予nil值。
  例:

x,y=3,5print(x)

  运行结果:3

print(y)

  运行结果:5

nil

  是Lua中的一个特殊内容,表示没有值(空值)。

print(SomeEmptyVariable)

  运行结果:nil

print(type(SomeEmptyVariable))

  运行结果:nil
  因为变量SomeEmptyVariable未绑定任何值,所以它会保持一个特别的值nil,类型也是nil。可以用此方法测试一个变量当前是否有值。

print(SomeEmptyVariable == nil)

  运行结果:true

print(type(SomeEmptyVariable) == "nil")

  运行结果:true
  注意区分nil值和字符串”nil”,type()函数总是返回一个字符串。

作用域

  (类似方法体,类等概念)

dolocal i = 10print("inside:"..i)end

  运行结果:inside:10
  do关键字说明了一个块的开始,end关键字说明了一个块的结束。local关键字定义在这个块中生效的局部变量。在块结束后写以下代码:

print(i)

  运行结果:nil
  在块外局部变量i失效。除手动的用do end创建块,特定的Lua结构如for循环、while循环以及函数的定义都会隐式的新建块。

建议:在魔兽世界中,插件会和其它可能使用全局变量的插件产生冲突。尽量使用局部变量。

组块

  在Lua中,组块要么是正在执行的文件,要么是正在运行的字符串。变量的作用域被限制在特定的组块中。这意味着在文件开头声明的局部变量在其它的文件中是不可访问的(它们在不同的组块中)。
  在Lua解释器中,输入的每一行都是它本身的组块,除非将其封装到一个块中。

local i = 10print(i)

  运行结果:nil
  除非特别指明,几乎所有的变量都是全局的。

常用运算符

比较运算符

运算符 说明 == 相等 < 小于 > 大于 <= 小于等于 >= 大于等于 ~= 不等于

  注意:等价运算符(”==”和”~=”)可以用来比较任意两个值,但是其它比较运算符只能用来比较相同类型的值。

字符串运算符

运算符 说明 举例 .. 链接字符串(两个英文句号) “x”..”y” ” 单引号定义字符串 x=’what\’s this’ “” 双引号定义字符串 x=”This is a \”“ [[]]或[==[]==] 方括号定义字符串 x=[[can include a ’ and “]]或x=[==[can include ‘,[[and”]==]

转义字符

运算符 说明 备注 \a 响铃字符 魔兽世界不支持 \b 退格符 魔兽世界不支持 \f 换页符 魔兽世界不支持 \n 换行符 魔兽世界支持 \r 回车符 魔兽世界不支持 \t 水平制表符 魔兽世界不支持 \v 竖直制表符 魔兽世界不支持 \\ 反斜杠 魔兽世界支持 \" 双引号 魔兽世界支持 \' 单引号 魔兽世界支持 \xxx ASCII码为xxx的字符 魔兽世界支持

逻辑运算符

and(与)

  当且仅当两个参数都是true时,返回true;当任意一个操作数是false或不存在值的时候,返回false。

print(true and true)

  运行结果:true

print(false and true)

  运行结果:true
  特点:Lua只对必要的表达式求值(或叫短路求值),如果第一个参数为true,它只返回第二个参数,因为表达式true and value当且仅当value为ture时才返回true。

print(true and 4)

  运行结果:4

print(true and "Hello")

  运行结果:Hello

or(或)

  只要两个操作数中有一个为true,返回true。比and优先级低,必要时需添加括号。

print(true or true)

  运行结果:true

print(false or true)

  运行结果:true

print(false and false or true)

  运行结果:true
  特点:可与and组合使用,形成a?b:c格式的语句。

print(false and "Hello" or "World")

  运行结果:World

not(非)

  将一个布尔值,转换为另一个。

print(not true)

&emspl; 运行结果:false

print(not false)

  运行结果:true
  特点:任意不是false和nil的值都会被认为是true。

print(not 4)

  运行结果:false

print(not "hello")

  运行结果:false

0 0
原创粉丝点击