最近闲来无事 学习一下 LUA语言

首先需要明白 

Lua 是动态类型语言,变量不要类型定义,只需要为变量赋值。 值可以存储在变量中,作为参数传递或结果返回。

Lua 中有 8 个基本类型分别为:nil、boolean、number、string、userdata、function、thread 和 table

nil

这个最简单,只有值nil属于该类,表示一个无效值(在条件表达式中相当于false)。

boolean

包含两个值:false和true。

number

表示双精度类型的实浮点数

string

字符串由一对双引号或单引号来表示

function

由 C 或 Lua 编写的函数

userdata

表示任意存储在变量中的C数据结构

thread

表示执行的独立线路,用于执行协同程序

table

Lua 中的表(table)其实是一个"关联数组"(associative arrays),数组的索引可以是数字、字符串或表类型。在 Lua 里,table 的创建是通过"构造表达式"来完成,最简单构造表达式是{},用来创建一个空表。

 

-- 创建一个空的 table
 local tbl1 = {}a = 5               -- 全局变量
 local b = 5         -- 局部变量

Lua 可以对多个变量同时赋值,变量列表和值列表的各个元素用逗号分开,赋值语句右边的值会依次赋给左边的变量。


a, b = 10, 2*x       <-->       a=10; b=2*x
 
site = {}
 > site["key"] = "aaaa"
 > print(site["key"])
 aaaa
 > print(site.key)
 aaaa

 

循环

Lua 编程语言中数值for循环语法格式:


for var=exp1,exp2,exp3 do  
    <执行体>  
end


var 从 exp1 变化到 exp2,每次变化以 exp3 为步长递增 var,并执行一次 "执行体"。exp3 是可选的,如果不指定,默认为1。

泛型for循环

泛型 for 循环通过一个迭代器函数来遍历所有值,类似 java 中的 foreach 语句。

Lua 编程语言中泛型 for 循环语法格式:


--打印数组a的所有值  
a = {"one", "two", "three"}
for i, v in ipairs(a) do
    print(i, v)
end


i是数组索引值,v是对应索引的数组元素值。ipairs是Lua提供的一个迭代器函数,用来迭代数组。

实例

循环数组 days:

实例

#!/usr/local/bin/lua  
 days = {"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}  
 for i,v in ipairs(days) do  print(v) end

以上实例输出结果为:


Sunday Monday Tuesday Wednesday Thursday Friday Saturday


嵌套语句

--[ 定义变量 --]
 a = 100;
 b = 200;

 --[ 检查条件 --]
 if( a == 100 )
 then
    --[ if 条件为 true 时执行以下 if 条件判断 --]
    if( b == 200 )
    then
       --[ if 条件为 true 时执行该语句块 --]
       print("a 的值为 100 b 的值为 200" );
    end
 end
 print("a 的值为 :", a );
 print("b 的值为 :", b );

Lua 函数

在Lua中,函数是对语句和表达式进行抽象的主要方法。既可以用来处理一些特殊的工作,也可以用来计算一些值。

Lua 提供了许多的内建函数,你可以很方便的在程序中调用它们,如print()函数可以将传入的参数打印在控制台上。

Lua 函数主要有两种用途:

  • 1.完成指定的任务,这种情况下函数作为调用语句使用;
  • 2.计算并返回值,这种情况下函数作为赋值语句的表达式使用。

函数定义

Lua 编程语言函数定义格式如下:


optional_function_scope function function_name( argument1, argument2, argument3..., argumentn)
    function_body
    return result_params_comma_separated
end


解析:

  • optional_function_scope: 该参数是可选的制定函数是全局函数还是局部函数,未设置该参数默认为全局函数,如果你需要设置函数为局部函数需要使用关键字 local
  • function_name: 指定函数名称。
  • argument1, argument2, argument3..., argumentn: 函数参数,多个参数以逗号隔开,函数也可以不带参数。
  • function_body: 函数体,函数中需要执行的代码语句块。
  • result_params_comma_separated: 函数返回值,Lua语言函数可以返回多个值,每个值以逗号隔开。