• Lua学习三----------Lua数据类型


    © 版权声明:本文为博主原创文章,转载请注明出处

    Lua数据类型

      - Lua是动态类型语言,不需要为变量定义类型,只需要为变量赋值

      - Lua有8中基本数据类型:nil、boolean、number、string、userdata、function、thread、table

    1.nil(空)

      - nil类型表示空指针,相当于java中的null

      - 将变量或者table表里的变量赋值为nil,表示销毁该变量

      1.1 nil.lua

    print(type(a))			--未声明该变量,nil
    
    a = 10					--声明变量
    print(type(a))
    a = nil					--将变量赋值nil,销毁该变量
    print(type(a))
    
    tab = {					--声明table
    	key1 = "val1", 
    	key2 = "val2", 
    	"val3",
    }
    
    for k, v in pairs(tab) do
    	print(k .. " : " .. v)
    end
    
    tab.key1 = nil			--将table中的变量key1赋值为nil,销毁该变量
    for k, v in pairs(tab) do
    	print(k .. " : " .. v)
    end
    

      1.2 效果预览

    2.boolean(布尔)

      - boolean类型只有两个可选值:true(真)和false(假)

      - boolean将false和nil看做“假”,其他的都为“真”

      2.1 boolean.lua

    print(type(true))							--boolean
    print(type(false))							--false
    
    if nil then									--nil为假
    	print("nil为真")
    else
    	print("nil为假")
    end
    
    if not nil and not false then				--Lua将false和nil看做"假",其他的都是“真”
    	print("除了false和nil其他都为真")
    else
    	print("除了false和nil外还有别的假")
    end

      2.2 效果预览

    3.number(数字)

      - Lua默认只有一种number类型 -- double(双精度)类型(默认类型可以修改luaconf.h里的定义)

      3.1 number.lua

    print(type(0))
    print(type(1))
    print(type(1.1111))
    print(type(-1))
    print(type(-1.1111))
    print(type(2e+1))
    print(type(-0.112e+06))
    

      3.2 效果预览

    4.string(字符串)

      - 字符串由一对双引号或单引号表示

      - 也可以用2个方括号“[[]]”来表示“一块”字符串

      - 在对一个数字字符串上进行算术操作时,Lua 会尝试将这个数字字符串转成一个数字

      - 字符串连接使用 .. 

      - 使用 # 来计算字符串的长度,放在字符串前面

      4.1 string.lua

    a = "This is double quotation marks string"				-- 双引号字符串
    print(type(a) .. " -- " .. a)
    b = 'This is single quotation marks string'				-- 单引号字符串
    print(type(b) .. " -- " .. b)
    
    c = [[													
    	<html>
    		<head></head>
    		<body>
    			This is a block string
    		</body>
    	</html>
    ]]														-- [[]]表示块字符串
    print(type(c) .. " -- " .. c)
    
    val1 = "2"
    val2 = "4"
    val3 = val1 + val2										-- 数字字符串进行算数操作,自动转换成数字
    print(""2" + "4" = " .. val3)
    
    s1 = "I'm prefix, "
    s2 = "I'm suffix"
    print(s1 .. s2)											-- .. 连接两个字符串
    
    s3 = "You guess my length"
    print(""" .. s3 .. ""的长度是:" .. #s3)				-- # 计算字符串长度
    

      4.2 效果预览

    5.table(表)

      - 在Lua里,table的创建时通过“构造表达式”来完成的,最简单的构造表达式是{},用来创建一个空表

      - 可以在表里添加一些数据,直接初始化表

      - Lua中的表其实是一个“关联数组”(associative arrays),数组的索引可以是数字或者字符串

      - Lua中表的默认索引是从1开始的

      - Lua中表不会固定大小,有新数据添加时表长度会自动增加,没初始化的表都是nil

      5.1 table.lua

    tab1 = {}							-- 创建一个空表
    print("tab1:")
    for k, v in pairs(tab1) do
    	print("", k .. " : " .. v)
    end
    
    tab2 = {							-- 初始化表
    	a = "and", 
    	b = "but", 
    	c = "can", 
    	d = "do"
    }
    print("tab2:")
    for k, v in pairs(tab2) do
    	print("", k .. " : " .. v)
    end
    
    tab3 = {}
    tab3["key"] = "value"
    key = 10
    tab3[key] = 20
    tab3[key] = tab3[key] + 11			-- 表的索引既可以是字符串,也可以是数字
    print("tab3:")
    for k, v in pairs(tab3) do
    	print("", k .. " : " .. v)
    end
    
    tab4 = {"a", "b", "c", "d"}			-- 表默认的索引是从1开始的
    print("tab4:")
    for k, v in pairs(tab4) do
    	print("", k .. " : " .. v)
    end
    
    tab5 = {}
    tab5["key1"] = "value1"
    tab5[2] = "value2"
    print("tab5:")
    for k, v in pairs(tab5) do			-- 表没有固定大小,新增数据时表会自动增加
    	print("", k .. " : " .. v)
    end
    

      5.2 效果预览

    6.function(函数)

      - 在Lua中,函数被看做“第一类值”,函数可以存在变量里

      - 函数可以以匿名函数(anonymous function)的方式通过参数传递

      6.1 function.lua

    function factorial1(n)
    	if n == 0 then
    		return 1
    	else
    		return n * factorial1(n - 1)
    	end
    end
    
    print("factorial1(5):" .. factorial1(5))	-- 函数,计算阶乘
    
    factorial2 = factorial1						-- 函数可以存在变量里
    print("factorial2(5):" .. factorial2(5))	
    
    function anonymous(tab, fun)
    	for k, v in pairs(tab) do
    		print(fun(k, v))
    	end
    end
    
    tab = {
    	key1 = "val1",
    	key2 = "val2"
    }
    
    anonymous(tab, function (key, val)			-- 匿名函数的方式通过参数传递
    	return key .. " = " .. val
    end)
    

      6.2 效果预览

    7.thread(线程)

      - 在 Lua 里,最主要的线程是协同程序(coroutine)。它跟线程(thread)差不多,拥有自己独立的栈、局部变量和指令指针,可以跟其他协同程序共享全局变量和其他大部分东西。

      - 线程跟协程的区别:线程可以同时多个运行,而协程任意时刻只能运行一个,并且处于运行状态的协程只有被挂起(suspend)时才会暂停。

    8.userdata(自定义类型)

      - userdata 是一种用户自定义数据,用于表示一种由应用程序或 C/C++ 语言库所创建的类型,

      - 可以将任意 C/C++ 的任意数据类型的数据(通常是 struct 和 指针)存储到 Lua 变量中调用。

    参考:http://www.runoob.com/lua/lua-data-types.html

  • 相关阅读:
    《计算机网络》总结
    【操作系统】死锁
    【操作系统】进程同步
    【操作系统】处理器调度
    【操作系统】总结二(进程与线程)
    【操作系统】总结一
    前缀、中缀、后缀表达式
    QMap
    Qt 常用的功能
    Qt 文件处理
  • 原文地址:https://www.cnblogs.com/jinjiyese153/p/6698944.html
Copyright © 2020-2023  润新知