《Programming in Lua 3》读书笔记(二)
加班没啥事,写写博客吧
昨天记录了第一章的内容,今天尽量把第二章的内容过一遍,写个笔记。
《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 = [[ <html> <head> <title>An HTML Page</title> </head> <body> <a href = "http://www.lua.org">Lua</a> </body> </html> ]] print(page)
另外用"[==[" "]==]"这两个符号也可以嵌入一段字符串(保证两边的"="数量一致),如
a = [==[ <![CDATA[Hello world]]> ]==] 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类型,以保证运行安全。
这一部分就暂时写到这里,继续加油(主要是要下班了)