【Lua】(1)基础语法

2021-01-26  本文已影响0人  littlefogcat

一、变量

Lua有8个基本类型:无效值nil、布尔值boolean、数number、字符串string、函数function、自定义类型userdata、线程thread、表table

无需声明一个变量就可使用,不过在赋值之前,变量的值为nil,表示不存在。

Lua为动态类型语言,变量的类型可以动态改变。

print(a) -- nil
print(type(a)) -- nil
a= 1
print(a) -- 1
print(type(a)) -- number
a= "abc" 
print(a) -- abc
print(type(a)) -- string

一些要注意的点

number
所有数字都是双精度浮点数。

nil
虽然nil的类型是nil,但是type(nil)返回的是字符串"nil"

string
拼接字符串使用..而不是加号。1+"1"会得到2.0

table
table是key-value形式的表,可以嵌套。
初始化格式tb = {[key1] = value1, [key2] = value2, ...},如tb = {["a"] = "hello", ["b"] = {1, 2, 3}}
使用tb[key]来取对应的value值,表中没有的项会返回nil;使用tb[key] = value的形式来更新表。

数组
Lua中数组的本质是一个table。
使用tb = {"a", "b", "c"}的形式初始化一个数组,等同于tb = {[1] = "a", [2] = "b", [3] = "c"}
要注意数组的序号是从1开始的,并且数组中元素的数据类型不需要一致。

变量作用域
变量默认是全局的,一处定义到处使用。
使用local关键字修饰变量,可以将其变为局部变量。

二、循环

2.1 for

循环有两种方式:数值循环迭代循环

2.1.1 数值循环
数值循环格式:

for i = 起始值, 结束值, 间隔值 do
    -- statements
end

其中,间隔值为1的时候可以省略。

2.1.2 迭代循环
遍历表tb

tb = {["a"] = "hello", ["b"] = 2}
for k,v in pairs(tb) do
    print(k, v)
end

其中,pairs为内置函数,提供了table的迭代器。

2.2 while

while格式:

while(condition)
do
   -- statements
end

2.3 repeat-until

repeat-until格式:

repeat
   -- statements
until( condition )

三、条件语句

格式:

if(cond1) then
    -- statements
elseif(cond2) then
    -- statements
elseif(cond3) then
    -- statements
...
else
    -- statements
end

四、函数

函数的形式

function类型的变量有两种定义方式,二者等价。调用的时候记得加括号,不然就是一个普通的变量。

function foo()
    print("hello")
end
foo() -- hello

bar = function()
    print("hello")
end
bar() -- hello

有几点需要注意:

  1. 函数可以嵌套;
  2. 函数默认是全局的,即使是嵌套在其他函数中;如果要定义局部函数,使用local关键字。

例:

function a()
    print("a")
    function b()
        print("b")
    end
    c = function()
        print("c")
    end
    local function d()
        print("d")
    end
end

a() -- a
b() -- b
c() -- c
d() -- 报错,局部函数外部不能访问

返回值

Lua函数可以返回多个结果

function foo()
    return "hello", "world"
end

可变长参数

使用...表示可变长的参数。
使用pairs{...}来获取变长参数的迭代器。
使用select("#", ...)来获取传入的可变长参数个数。

f = function(...) -- 可变参数函数
    print("一共有"..select("#", ...).."个参数")
    for k, v in pairs{...} do
        print(k..": "..v)
    end
end
f("a", "b", "c")

输出

一共有3个参数
1: a
2: b
3: c

五、运算符

数学运算:
+、-、*、/:加减乘除
%:求余
^:求幂

关系运算:
==:等于
~=:不等于
>、<、>=、<=:大于、小于、大于等于、小于等于

逻辑运算:
and:与
or:或
not:否

其他:
..:字符串连接
#:返回字符串或表的长度

上一篇 下一篇

猜你喜欢

热点阅读