《Programming in Lua 3》读书笔记(二)

来源:互联网 发布:淘宝怎么查快递到哪了 编辑:程序博客网 时间:2024/05/22 10:29

加班没啥事,写写博客吧大笑

昨天记录了第一章的内容,今天尽量把第二章的内容过一遍,写个笔记。

《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 = printprint(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 11print("hello",1) --error
        Lua中有个很好的连接操作"..",使用:
print(20 .. 30)  --2030
print("hello" .. "world") --hello world

要注意的是20与".."之间要有空格,后面的也是。

        另外两个重要的转换符:string->number(tonumber);number->string(tostring)

a = 10print(type(a))   --numberprint(type(tostring(a))) --string
        另外为保证程序运行安全,感觉一个挺有用的操作是
function checkBoolean( value )if value == true or value == false thenprint(tostring(value) .. " is boolean")elseprint(tostring(value) .. " is not boolean")endendcheckBoolean(true)
        输出操作时,将变量转换为string类型,以保证运行安全。

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

0 0