Lua  - 讨论区

标题:【Lua101】类型和值

2011年02月22日 星期二 19:11

作为动态语言的Lua有8个基本类型:nil、boolean、number、string、userdata、function、thread、table,使用type函数可以获取变量或者值的类型(这里和Python又是很类似)。依次来看下这8个基本类型(话说还有不基本的吗?先不管,慢慢看):
1、Nil
Lua中特殊的类型,它的值就是nil;一个全局变量没有被赋值以前默认值为nil;给全局变量负nil可以删除该变量。(相当于None?不过貌似更强大)
2、Booleans
很熟悉的类型,有两个取值:false和true。需要注意的一点是,Lua中只有false和nil为假,其他包括0和空字符串都为真。
3、Numbers
这里叫作实数,没有int和float之分,包含了两者。
4、Strings
字符序列,lua是8位字节,所以字符串可以包含任何数值字符,包括嵌入的0。
可以使用单引号或者双引号表示字符串,还可以使用[[...]]表示字符串。这种形式的字符串可以包含多行也,可以嵌套且不会解释转义序列,如果第一个字符是换行符会被自动忽略掉,这种形式的字符串用来包含一段代码是非常方便的。
一个string可以只包含一个字母也可以包含一本书,Lua可以高效的处理长字符串,1M的string在Lua中是很常见的。Lua自动进行内存分配和释放。
a = "a line"
b = 'another line'
Lua转义序列:
\a bell
\b back space               -- 后退
\f form feed                -- 换页
\n newline                  -- 换行
\r carriage return          -- 回车
\t horizontal tab           -- 制表
\v vertical tab
\\ backslash                 -- "\"
\" double quote             -- 双引号
\' single quote             -- 单引号
\[ left square bracket      -- 左中括号
\] right square bracket     -- 右中括号
运行时,Lua会自动在string和numbers之间自动进行类型转换,当一个字符串使用算术操作符时,string就会被转成数字。
print("10" + 1)             --> 11
print("10 + 1")             --> 10 + 1
print("-5.3e - 10" * "2")   --> -1.06e-09
print("hello" + 1)          -- ERROR (cannot convert "hello")
反过来,当Lua期望一个string而碰到数字时,会将数字转成string。
print(10 .. 20)      --> 1020
.. 在Lua中是字符串连接符,当在一个数字后面写..时,必须加上空格以防止被解释错。
尽管字符串和数字可以自动转换,但两者是不同的,像10 == "10"这样的比较永远都是错的。如果需要显式将string转成数字可以使用函数tonumber(),如果string不是正确的数字该函数将返回nil。
line = io.read()         -- read a line
n = tonumber(line)       -- try to convert it to a number
if n == nil then
error(line .. " is not a valid number")
else
print(n*2)
end
反之,可以调用tostring()将数字转成字符串,这种转换一直有效:
print(tostring(10) == "10")     --> true
print(10 .. "" == "10")         --> true
5、Functions
函数是第一类值(和其他变量相同),意味着函数可以存储在变量中,可以作为函数的参数,也可以作为函数的返回值。(先知道有这么个玩意,等用到的时候再去深入了解)
6、Userdata\Threads\Table
userdata可以将C数据存放在Lua变量中,来进行赋值和比较操作。
threads应该是线程了吧,还有table这里也没有介绍到,相信在后面了解到。
OK,这里又是一个暂时的end。

2011年02月22日 星期二 21:44

总结的好,我把Lua书本扫完一遍,就基本没怎么玩了。。。

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2020

    京ICP备05028076号