Lua:03---Lua数据类型(附加逻辑运算符)

一、Lua数据类型汇总

  • Lua语言是一种动态类型语言,在这种语言中没有类型定义,每个值都带有其自身的类型信息
  • Lua有8种基本类型:
    • nil:空
    • boolean:布尔
    • number:数值
    • string:字符串
    • userdata:用户数据
    • function:函数
    • thread:线程
    • table:表
  • 使用type()函数可以获取一个值对应的类型名称,该函数的返回值为string类型:
type(nil)
type(true)
type(10.4*3)
type("Hello world")
type(io.stdin)
type(print)
type(type)
type({})
type(type(X))

Lua:03---Lua数据类型(附加逻辑运算符)_第1张图片

  • 变量没有预定义的类型,任何变量都可以包含任何类型的值:

Lua:03---Lua数据类型(附加逻辑运算符)_第2张图片

  • 一般情况下,将一个变量用作不同类型时会导致代码的可读性不佳;但是,在某些情况下谨慎地使用这个特性可能会带来一定程度的便利。例如,当代码发生异常时可以返回一个nil以区别于其他正常情况下的返回值

二、nil

  • nil是一种只有一个nil值的类型,它的主要作用就是与其他所有值进行区分。Lua语言使用nil来表示无效值(即没有用的值)的情况
  • 像之前介绍的,一个全局变量在第一次被赋值前的默认值就是nil,而将nil赋值给全局变量则相当于将其删除

三、boolean

  • boolean类型具有两个值:true和false

Lua中的条件测试

  • 在Lua中,boolean值并非用于条件测试的唯一方式,任何值都可以表示条件
  • Lua中,条件测试把false和nil视为假,将除了false和nil之外的所有其他值视为真(特别的是,在条件检测中Lua语言把0和空字符串也视为真

Lua逻辑运算符

  • Lua支持常见的逻辑运算符:and、or、not
    • and运算符的结果为:如果第一个操作数为false,则返回第一个操作数;否则返回第二个操作数
    • or运算符的结果为:如果第一个操作数为true,则返回第一个操作数;否则返回第二个操作数
    • not运算符的结果为:返回操作数的相反值(true or flase)
  • 例如,下面是and和or的用法
4 and 5

nil and 13

false and 13

0 or 5

false or "hi"

nil or false

Lua:03---Lua数据类型(附加逻辑运算符)_第3张图片

  • 例如,下面是not的用法
not nil

not false

-- 注意, 0也是真
not 0

not not 1

not not nil

Lua:03---Lua数据类型(附加逻辑运算符)_第4张图片

  • and和or都遵循短路求值:

    • 即只在必要时才对第二个操作数进行求值

    • 例如,下面的表达式不会发生运行时异常,因为当i等于0时,a/i不会执行

i ~=0 and a/i > b
  • 下面的表达式非常有用:即当x未被初始化时,将其默认值设为v(假设x不是boolean类型的false)
x=x or v

-- 上面的表达式等价于
if not x then x = v end

  • 另一种有用的表达式类似于"(a and b) or c"或者"a and b or c"(and的优先级高于or,所以括号可以去掉):
    • 当b不为false时,它们等价于C语言的三目运算符a?b:c
    • 例如我们可以使用表达式(x>y) and x or y选出x和y中较大的一者

Lua:03---Lua数据类型(附加逻辑运算符)_第5张图片

四、数值类型

  • 请参阅:https://blog.csdn.net/qq_41453285/article/details/107933437

五、字符串类型

  • 请参阅:https://blog.csdn.net/qq_41453285/article/details/107942933

六、表类型

  • 请参阅:https://blog.csdn.net/qq_41453285/article/details/107958887

七、userdata

  • userdata类型允许把任意的C语言数据保存在Lua语言变量中
  • 在Lua语言中,用户数据类型除了赋值和相等性测试外,没有其他预定义的操作
  • 用户数据被用来表示由应用或C语言编写的库所创建的新类型。例如,标准I/O库使用用户数据来表示打开的文件
  • 在后面介绍C API的时候会讨论更多的相关内容

八、附加

  • 其他数据类型在后面介绍

你可能感兴趣的:(Lua)