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

posted @ 2017-04-12 14:11  禁忌夜色153  阅读(417)  评论(0编辑  收藏  举报