加班没啥事,写写博客吧
昨天记录了第一章的内容,今天尽量把第二章的内容过一遍,写个笔记。
《Programming in Lua 3》Part1
2.Types and Values
与C++不同,Lua中声明一个变量不需要指定其类型,因此我们可以将任意一个变量声明为Lua中支持的八个类型中的任意一个。Lua支持八中基本类型:nil,boolean,number,string,userdata,function,thread,table。
Lua中的变量声明与使用:
a = 10;
a = "string"
a = {}
--type函数的使用
print(type(a)) --table
Lua中一个声明一个变量,并且没有赋值的时候其值为nil:
print(a) --nil
书中有提到:functions are first-class values in Lua;so,we can manipulate them like any other value.这句话我的理解便是function也是一个value,可以赋值给变量,书上有一个例子:
a = print
print(type(a)) --function
从中可以看到,可以将function--print赋值为变量a,用type输出其类型的时候输出为function。这个是否可以理解为C++中的函数指针呢?(虽然我C++的函数指针用起来不是很熟)
2.1 Nil
Nil 书本上所说的是non-value,应该和C++中的NULL意思差不多吧。但是一个变量不赋值的情况下,默认值就是Nil,并且一个全局变量(非local)赋值为nil的时候,系统就会回收这个变量的占用的内存。
2.2 Booleans
True / False。Lua条件判断时,将Nil和false归为false,其余的都是true。
2.3 Numbers
Lua中的Number代表着实数,lua中没有整数。关于这个作者有他的解释。这段英文解释感觉不好怎么说,还是得看看别人的翻译,毕竟我不是科班出身,有些计算机术语还是不会用。大概的意思就是认为整数用起来没必要吧。。。然后就是计算机运行浮点计算的速度快于整型数的计算,所以这里是考虑到了性能。然后这里也有必要提出:计算机中的二进制、八进制、十进制、十六进制数之间的互相转换这个很有必要加强训练一下!!!
2.4 Strings
Lua中对string类型的操作与C/C++中不同,不能改变string内的值,而只能通过创建新的string类型值来满足我们的需求。对于string的操作网上看到一个很有用的博客:点我,这里讲的挺详细的。
Literal strings(字符串)
Lua中可以用双引号,也可以用单引号来分隔字符串,感觉很自由啊~!
a = "literal string"
b = 'literal string'
和C/C++一样的转义符
\a --响铃(一直没搞懂这个是啥意思)
\b --退格
\f --换页??
\n --换行
\r --回车
\t --水平制表位
\v --垂直制表
\\ --代表一个反斜线字符''\'
\" --代表一个双引号字符
\' --代表一个单引号(撇号)字符
Long strings
用"[[" "]]"这两个符号可以组成长字符串,即针对切行了的字符串?
page = [[
An HTML Page
Lua
]]
print(page)
另外用"[==[" "]==]"这两个符号也可以嵌入一段字符串(保证两边的"="数量一致),如
a = [==[
]==]
print(a)
在这里如果继续用"[[" "]]"就不行。关于这两种用法的具体解释我还是不太清楚,只能说试着用。。。
2.5 Coercions(转换)
数字数字、字符字符之间的转换?
print("10"+1) --ok print 11
print("hello",1) --error
Lua中有个很好的连接操作"..",使用:
print(20 .. 30) --2030
print("hello" .. "world") --hello world
要注意的是20与".."之间要有空格,后面的也是。
另外两个重要的转换符:string->number(tonumber);number->string(tostring)
a = 10
print(type(a)) --number
print(type(tostring(a))) --string
另外为保证程序运行安全,感觉一个挺有用的操作是
function checkBoolean( value )
if value == true or value == false then
print(tostring(value) .. " is boolean")
else
print(tostring(value) .. " is not boolean")
end
end
checkBoolean(true)
输出操作时,将变量转换为string类型,以保证运行安全。
这一部分就暂时写到这里,继续加油(主要是要下班了)