4.简单变量类型

4.简单变量类型


4.1 知识点

Lua所有的变量类型

Lua 中一共有 8 种基础类型:

  • nil
  • boolean
  • number
  • string
  • function
  • table
  • userdata
  • thread

先学习最基础的几种:

  • nil 空型
  • number 数值型
  • string 字符串型
  • boolean 布尔型

functiontablethread 后面再学习。

userdata 一般和宿主环境有关,比如 C/C++ 扩展,或者 Unity Lua 方案里暴露给 Lua 的对象,不展开。

简单变量类型的声明与赋值

  • Lua 中所有的变量声明都不需要声明变量类型,Lua 会自动判断类型,类似 C# 里面的 var
  • Lua 中的变量可以重新赋不同类型的值,Lua 会根据当前赋进去的值识别类型。
  • 重新赋值虽然方便,但项目代码里不建议同一个变量各种类型乱换,读代码会不清晰。
a = nil
a = 1
a = "123"
a = false
  • Lua 中使用没有声明过的变量,不会报错,默认值是 nil
print(b) -- nil

nil空型变量

  • nil 有点类似 C# 中的 null
  • 一个变量没有赋值时,默认就是 nil
  • 表里的字段被赋值为 nil 可以理解为相当于不存在。
c = nil
print(c) -- nil

number数值型变量

  • number 表示数值类型。
  • 基础语法阶段,可以简单理解为整数和小数都是 number
  • 不同 Lua 版本里,数字底层实现会有一些差异,不展开。
d = 1
print(d) -- 1

e = 1.2
print(e) -- 1.2

string字符串型变量

  • 字符串的赋值使用单引号或者双引号包裹都可以。
  • Lua 中没有 char 变量,单个字符也是字符串。
  • 项目里一般按团队习惯统一一种写法,最好不要一会儿单引号,一会儿双引号。
f = "12312"
print(f) -- 12312

g = '123'
print(g) -- 123

boolean布尔型变量

  • boolean 只有两个值:truefalse
  • Lua 里只有 falsenil 会被当成假。
  • 其他值都是真,包括 0、空字符串 ""、空表 {}
h = true
print(h) -- true

i = false
print(i) -- false
if 0 then
    print("0 在 Lua 中也是真")
end

if "" then
    print("空字符串在 Lua 中也是真")
end

和 C#、C、C++、Python 不太一样。写条件判断时一定不能把 0 也当成假。

其他非简单变量类型

除了上面几个简单类型,Lua 里其他几个类型先简单认识:

  • function:函数类型。Lua 里的函数可以像普通变量一样保存、传参、返回。
  • table:表类型。Lua 里最核心的复合结构,数组、字典、对象都要用。
  • thread:协同程序类型,不是操作系统线程。
  • userdata:一般由宿主环境或 C/C++ 扩展提供。
print(type(function() end)) -- function

print(type({}))             -- table

local co = coroutine.create(function()
end)
print(type(co))             -- thread

type函数得到变量的类型

  • type 函数中传入变量,可以得到变量的类型。
  • type 函数的返回值是字符串。
print(type(c)) -- nil
print(type(type(c))) -- string
print(type(d)) -- number
print(type(e)) -- number
print(type(f)) -- string
print(type(g)) -- string
print(type(h)) -- boolean
print(type(i)) -- boolean

print(type(type(c))) 输出 string,是因为 type(c) 的返回值本身就是字符串 "nil"

调试 Lua 脚本时,type 很常用。动态类型语言里,很多报错是变量当前类型和预期不一样。打印一下 type(x) 能更快地定位问题。


4.2 知识点代码

Lesson4_简单变量类型.lua

print("**********简单变量类型************")

print("**********知识点一 Lua所有的变量类型************")
-- Lua 一共 8 种基础类型:nil、boolean、number、string、function、table、userdata、thread
-- 先学 nil、number、string、boolean
-- function、table、thread 后面再学习
-- userdata 和宿主/C#/Unity 对象有关,不展开

print("**********知识点二 简单变量类型的声明与赋值************")
-- 声明不用写类型,类似 C# 的 var;可重新赋不同类型,Lua 按当前值识别
-- 项目里不建议同一变量各种类型乱换

a = nil
a = 1
a = "123"
a = false

-- Lua 中使用没有声明过的变量
-- 不会报错,默认值是 nil
print(b) -- nil

print("**********知识点三 nil空型变量************")
-- nil 类似 C# 的 null;未赋值默认 nil;表字段赋 nil 一般等于移除字段
c = nil
print(c) -- nil

print("**********知识点四 number数值型变量************")
-- number:整数和小数都是 number;版本底层差异不展开
d = 1
print(d) -- 1

e = 1.2
print(e) -- 1.2

print("**********知识点五 string字符串型变量************")
-- 单引号、双引号都可以;没有 char,单字符也是 string
-- 项目里引号写法按团队习惯统一
f = "12312"
print(f) -- 12312

g = '123'
print(g) -- 123

print("**********知识点六 boolean布尔型变量************")
-- boolean 只有 true 和 false 两个值
h = true
print(h) -- true

i = false
print(i) -- false

-- Lua 里只有 false 和 nil 是假;0、空字符串、空表都是真
if 0 then
    print("0 在 Lua 中也是真")
end

if "" then
    print("空字符串在 Lua 中也是真")
end
-- 写条件判断时不把 0 也当成假,和 C# 等不太一样

print("**********知识点七 其他非简单变量类型************")
-- function:可像普通变量保存、传参、返回
-- table:数组、字典、对象都要用
-- thread:协同程序,不是操作系统线程
-- userdata:宿主或 C/C++ 扩展提供

print(type(function() end)) -- function
print(type({}))             -- table

local co = coroutine.create(function()
end)
print(type(co))             -- thread

print("**********知识点八 type函数************")
-- type(x) 返回类型名字符串
-- type(type(c)) 是 string,因为 type(c) 本身返回 "nil"
-- 调试时先 print(type(x)),很多错是类型和预期不一致
print(type(c))       -- nil
print(type(type(c))) -- string
print(type(d))       -- number
print(type(e))       -- number
print(type(f))       -- string
print(type(g))       -- string
print(type(h))       -- boolean
print(type(i))       -- boolean


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏