Lua 语言特性 :
nil(空值 相当于其他语言的null)
- nil 类型表示一种没有任何有效值 , 例如打印一个没有赋值的变量,便会输出一个 nil 值 .
- nil 做判断时会被认定为 false .
> print(type(a))
nil
>
- nil 还有一个”删除”作用,给变量赋值 nil ,等同于把它们删掉 .
> print(a)
nil
> a = 10
> print(a)
10
> a = nil
> print(a)
nil
>
string(字符串)
- 字符串由一对双引号或单引号来表示 .
str1 = "this is string"
str2 = 'this is string'
- 也可以用 2 个方括号 “[[]]” 来表示”一块”字符串 .
strblock = [[
this is string block
try
]]
print(strblock)
- 对数字字符串进行算术操作时,Lua 会尝试将这个数字字符串转成一个数字 ( 这一点和JavaScript很类似 )
> print("2" + 6)
8
> print("1" + "5")
6
- 使用 .. 来拼接字符串 .
> print("a" .. 'b')
ab
> print(157 .. 428)
157428
>
- 使用 # 来计算字符串的长度 , 放在字符串前面 .
> str = "abcd"
> print(#str)
4
table(表)
Lua 中的表(table)其实是一个”关联数组”(associative arrays),数组的索引可以是数字或者是字符串 ( 和JavaScript一样 ).
注意 : Lua 不同于其他语言的数组 , Lua数组的索引不是以 0 开头 , 而是以 1 开头 .
> table = {"a","b","c"}
> for k,v in pairs(table) do
>> print(k,v)
>> end
1 a
2 b
3 c
>
交换
Lua中交换值和其他语言不太一样 , 通常是下面这种形式 .
x, y = y, x
a[1], a[2]= a[2], a[1]
//实例
> a = 5
> b = 10
> print(a,b)
5 10
> a,b = b,a
> print(a,b)
10 5
>
创建变量与赋值
当变量个数和值的个数不一致时,Lua会一直以变量个数为基础采取以下策略
- 变量个数 > 值的个数 多余变量值等于nil
- 变量个数 < 值的个数 多余的值会被忽略
//创建3个变量 值只有2个 第3个的值为nil
a, b, c = 0, 1
print(a,b,c) --> 0 1 nil
//创建2个变量 值有3个 第3个值忽略
a, b = a+1, b+1, b+2 -- value of b+2 is ignored
print(a,b) --> 1 2
//下面这种是常见的错误情况
//和第一种情况一样处理
a, b, c = 0
print(a,b,c) --> 0 nil nil
多值赋值经常用来交换变量,或将函数调用返回给变量 .
a, b = f()
f()返回两个值,第一个赋给a,第二个赋给b .
应该尽可能的使用局部变量,有两个好处:
* 1. 避免命名冲突。
* 2. 访问局部变量的速度比全局变量更快。
0 为 true ( 在大多数语言里0都会认作false )
Lua认为false和nil为假,true和非nil为真 .
要注意的是Lua中 0 为 true:
if(0)
then
print("0 为 true")
end
输出结果 :
0 为 true