Lua 基础之数据类型

谁借莪1个温暖的怀抱¢ 2022-06-12 05:17 370阅读 0赞

获取类型

Lua 有 nil,boolean,number,string,table,function 和 userdata 七种数据类型。我们可以用 type() 函数来返回一个变量的类型,返回值是 string。

  1. print(type(10)) --number
  2. print(type(nil)) --nil
  3. print(type(true)) --boolean
  4. print(type("hello")) --string
  5. print(type(print)) --function
  6. print(type({})) --table
  7. print(type(type)) --function
  8. print(type(type(10))) --number

弱类型

Lua的变量无需定义,变量的类型也可以随时更换。

  1. value=10
  2. print(value,type(value))
  3. value="this is a string"
  4. print(value,type(value))
  5. value=print
  6. value(value,type(value))

数值类型、布尔类型、空类型

  • Lua 中只有 number 来保存数值,没有整型和浮点型之分。
  • Lua 中除了nil 和 false为 假之外,其余全是真,包括 0。
  • Lua 中没赋值的变量为 nil,我们也可手动给变量赋 nil,相当于删除这个变量。

    —boolean
    —除了false和nil之外,其它值都是true
    print(10>10) —false
    if a then

    1. print([=[true]=])

    else

    1. print([=[false]=]) --run

    end
    a=0
    if a then

    1. print("a is true") --run

    else

    1. print("a is false")

    end

    —number
    —只有浮点数,可用科学计数法
    num=0.234
    num = num + 1
    print(num) —1.234
    num=-1.01e-2
    print(num) — -0.0101
    print(10e3) —10000.0
    print(-2.34456e5) — -234456.0

    —nil
    —没声明的变量的值都为nil、手动给变量赋nil相当于删除该变量
    print(x) —nil
    print(x == nil) — true
    x=100
    print(x == nil) — false
    x=nil
    print(x == false) — false
    print(x == nil) — true

字符串类型

Lua 中不仅可以用单引号和双引号来表示字符串常量,还可以使用成对的中括号来表示,比如

  1. [[hello]]
  2. [=[hello]=]
  3. [===[hello]===]

这个中括号表示法也可用于多行注释(Lua 的单行注释为 –),比如 --[=[this is a note]=]

  1. --string
  2. --字符串使用8位编码,不可修改内容
  3. str="你好!"
  4. print(str) --乱码
  5. str="hello world"
  6. print(str)
  7. str=[[hello string ]]
  8. print(str)
  9. str=[==[hello string too]==]
  10. print(str)
  11. str='hello char\nhello char too'
  12. print(str)
  13. --string
  14. --charint
  15. print(string.byte(str,0,5)) --104 101 ...
  16. --intchar
  17. print(string.char(104,105)) --hi
  18. --查找子字符串的位置
  19. print(string.find(str,"cha",1,true))
  20. --替换子字符串
  21. s = string.gsub(str, "char", "string")
  22. print(s)
  23. --转为大写
  24. print(string.upper(s))

简单数据类型转换

Lua 简单的数据类型有 nil、number、boolean和string 四种类型。number 和 string可自动相互转换,使用算术运算符可将 string 转成 number(如果不合法会出错),使用 .. 可将 number 转成 string。

  1. --数据类型自动转换
  2. --使用算术运算符转成数字
  3. print("10" + 10) -- 20
  4. print(1.234-"-10") --11.234
  5. print("10"*"11") --110
  6. --print("h" + 1) -- error
  7. --print(10 + false) -- error
  8. --print(10+nil) --error
  9. --使用..转换成字符串
  10. print("10"..10) --1010
  11. print(10..10) --error
  12. --print("hello" .. false) -- error
  13. --print("hello"..nil) --error

table类型

table 是 lua 里面唯一的数据结构,函数、对象等都是用 table 实现的。table 有数字索引和键值对两种存储方式,且两者可以混用。数字索引从 1 开始。可以用 ipairs 迭代器遍历数字索引的元素,用 pairs 迭代器遍历所有元素。

  1. --table
  2. --tablelua唯一的数据结构,是一种键值存储方式,其实lua中的函数,对象等等都是table
  3. arr={}
  4. print(arr,#arr,arr[0]) --table:地址 0 nil
  5. --table的索引从1开始
  6. arr = { 1, 2, 3, 4 }
  7. print(arr[0], arr[1], #arr, arr[#arr]) -- nil 1 4 4
  8. arr = { x = 10, y = "hello" }
  9. print(arr.x, arr["x"]) --10 10
  10. arr['y']=true
  11. print(arr.y, type(arr["y"])) -- true boolean
  12. --table可以用数字索引和键值对,且两者可混用
  13. arr = { }
  14. arr[10]="first"
  15. arr["10"]="second"
  16. arr["+10"]="third"
  17. i=10 j="10" k="+10"
  18. print(arr[i]) --first
  19. print(arr[j]) --second
  20. print(arr[k]) --third
  21. print(arr[tonumber(j)]) --first
  22. print(arr[tonumber(k)]) --first
  23. --迭代器
  24. for k,v in pairs(arr) do
  25. print(k,v)
  26. end
  27. arr = { 5, 4, 3, 2, 1 }
  28. for i,v in ipairs(arr) do
  29. print(i,v)
  30. end

发表评论

表情:
评论列表 (有 0 条评论,370人围观)

还没有评论,来说两句吧...

相关阅读

    相关 lua数据类型

    数据类型 lua是动态类型语言。变量不要类型定义,只需要为变量赋值。值可以存储在变量中,作为参数或者结果返回 lux有八种基本类型: <table> <thead

    相关 Lua 基础模块

    模块 模块系统的设计目标是可以使用不同的方式来共享代码,一个模块就是一个代码库,其它模块 可以使用 require 函数来加载,加载后得到模块导出的所有东西,如函数、常量

    相关 Lua 数据类型

    Lua是动态类型语言,变量不要类型定义,只需要为变量赋值。 值可以存储在变量中,作为参数传递或结果返回。 Lua中有8个基本类型分别为:nil、boolean、number、

    相关 Lua--数据类型

    Lua数据类型 Lua 是动态类型语言,变量不要类型定义,只需要为变量赋值。 值可以存储在变量中,作为参数传递或结果返回。 Lua 中有 8 个基本类型分别为:`ni