【Lua】语法笔记#1

数据类型

Lua 是一种动态类型的语言。在语言中没有类型定义的语法,每个值都”携带“了它自身的类型信息。

Lua中有 8 种基础类型: nil(空)、boolean(布尔)、number(数字)、string(字符串)、userdata(自定义类型)、function(函数)、thread(线程)和table(表)。

Lua 中可以通过 type() 来得到 值 的类型。

print(type("Hello world"));     -->string
print(type(10.4*3));            -->number
print(type(type));              -->function
print(type(true));              -->boolean
print(type(nil));               -->nil

值得一提的是,在 Lua 中,只有 nilfalse 为假,除此之外的值均为 “真”。

数据类型 Table

类似数组的东西,但不是数组(关联数组),我认为table的本质就是保存了索引值的特殊数组。

注意:索引从1开始。

a = {
    name = "小明",
    age = 20,
    {x = 0,y = -10}
}

print(a.name);      -->小明
print(a[1].x);      -->0
print(a[2].x);      -->nil

table可以使用任何类型当索引值

用默认数字索引

local a = {[1] = 12, [2] = 43, [3] = 45, [4] = 90}
print(a[1]);            -->12

local b = {12, 43, 45, 90}
print(b[1]);            -->12

用table索引

local a = {{x = 1, y = 2},{x = 3, y = 10}}

用function索引

function test()
    print("Hello Table");
end
local a = {[test] = 1};
print(a[test]);

Lua操作符

  • 算术操作符

Lua的算术操作符基本没有什么改变,只是有一些新的操作符
“^”(指数),”%”(取摸)

a % b == a - floor(a / b) * b;
x % 1 (取x的小数部分),x - x%1(取x整数部分),x - x%0.01(x精确到小数点后两位)

x = math.pi;            -->π
print(x - x%1);         -->3

Lua里面使用 “..” 连接字符串

print("A".."B".."c".."D");      -->ABcD
print("A"..1);                  -->A1
print("A" + 1);                 -->非法,报错
  • 关系操作符

Lua提供了以下关系操作符:

< > <= >= == ~=

其中 ~= 用于不等性测试,== 用于等性测试。需要注意的是 nil 只与其自身相等。
对于 table,userdata和函数,Lua是作引用比较的。只有当它们引用的同一个对象时,才相等。

a = {}; a.x = 1; a.y = 0;
b = {}; b.x = 1; b.y = 0;
c = a;
print(a == c);          -->true
print(a == b);          -->false

对两个字符串作大小性比较时,按照字母次序比较字符串。具体的字母次序取决于对Lua的区域设置。

  • 逻辑操作符

逻辑操作符有 and、 or、 not。
and:如果它的第一个操作数为假,就返回第一个操作数,否则返回第二个操作数。
or: 如果它的第一个操作数为真,就返回第一个操作数,否则返回第二个操作数。

print(4 and 5);         -->5
print(4 or 5);          -->4

x = x or v; 等价于:if not x then x = v end;

(a and b ) or c; 等价于: a ? b : c;

赋值

Lua允许 “多重赋值”,也就是一下子将多个赋值予多个变量。每个值或每个变量之间以逗号分隔。

a, b = 10, 2;               -->赋值后,变量a = 10,b = 2。

x, y = y, x;                -->交换x与y。

a[i], a[j] = a[j], a[i];    -->交换a[i]与a[j]。

a, b, c = 0, 1; 
print(a, b, c);             -->0  1  nil

a, b = a+1, b+1, b+2;       -->其中 b+2 会被忽略
print(a, b)                 -->1  2

假设函数 f() 有两个返回值

a, b = f();

a接收第一个,b接收第二个。

你可能感兴趣的:(lua)