《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类型,以保证运行安全。

 

        这一部分就暂时写到这里,继续加油(主要是要下班了大笑)

posted @ 2014-05-22 19:41  Le Ciel  阅读(205)  评论(0编辑  收藏  举报