Lua 教程 在线

2043Lua 数据类型

使用 # 输出的值其实是字符串所占的字节数。当字符串为英文字符时,由于每个字符只占 1 个字节,所以输出结果等同于字符串长度:

print(#"HelloWorld")

输出结果:

10

当字符串中含有中文字符时,每个中文字符占据两个字节:

print(#"你好世界")

输出结果:

8

2042Lua 数据类型

type 函数的返回值类型是 string,所以与 type 比较时的 nil 应加上双引号。
print(type(type(0))) -- 结果为 string

未经赋值的全局变量与 nil 比较亦不会报错:

print(a===nil) -- 结果为 true

2041Lua 数据类型

不同于 C/C++,在 Lua 中对 0(number) 进行逻辑判断,得到的结果也是 true

if 0 then
    print("True.")
else
    print("False.")
end

运行结果将会是:True

2040Lua 数据类型

关于"nil 作比较时应该加上双引号"的补充:

原文是使用 type(x) ==nil 做比较,这个时候的确是需要添加双引号或单引号才行,但是如果没有使用type(变量)这个形式,就不需要加引号,看下面代码:

print(x == nil) --结果为true
print(x == "nil")--结果为false

2039Lua 数据类型

tab = {"Hello","World",a=1,b=2,z=3,x=10,y=20,"Good","Bye"}
for k,v in pairs(tab) do
    print(k.."  "..v)
end

如上代码输出结果存在一定规律,"Hello"、"World"、"Good"、"Bye"是表中的值,在存储时是按照顺序存储的,并且不同于其他脚本语言,Lua是从1开始排序的,因此,使用pairs遍历打印输出时,会先按照顺序输出表的值,然后再按照键值对的键的哈希值打印。

1  Hello
2  World
3  Good
4  Bye
x  10
y  20
z  3
b  2
a  1