Lua语言学习:基础知识
lua 语言的基础知识,语法,数据类型,流程控制等
Lua 数据类型
数据类型 | 描述 |
---|---|
nil | 这个最简单,只有值nil属于该类,表示一个无效值(在条件表达式中相当于false)。 |
boolean | 包含两个值:false和true。 |
number | 表示双精度类型的实浮点数 |
string | 字符串由一对双引号或单引号来表示 |
function | 由 C 或 Lua 编写的函数 |
userdata | 表示任意存储在变量中的C数据结构 |
thread | 表示执行的独立线路,用于执行协同程序 |
table | Lua 中的表(table)其实是一个"关联数组"(associative arrays),数组的索引可以是数字、字符串或表类型。在 Lua 里,table 的创建是通过"构造表达式"来完成,最简单构造表达式是{},用来创建一个空表。 |
注释
-- hello lua: 单行注释
print("hello lua")
--[[
多行注释
多行注释
--]]
print("Weclome to visit https://js.work")
标识符
- 可以:Lua 标示符用于定义一个变量,函数获取其他用户定义的项。标示符以一个字母 A 到 Z 或 a 到 z 或下划线 _ 开头后加上 0 个或多个字母,下划线,数字(0 到 9)。
- 不可以:Lua 不允许使用特殊字符如 @, $, 和 % 来定义标示符。
- 区分大小写
全局变量
- 默认直接声明就是全局
- 删除用 a=nil
获取变量类型
print(type("Hello world")) --> string
print(type(10.4*3)) --> number
print(type(print)) --> function
print(type(type)) --> function
print(type(true)) --> boolean
print(type(nil)) --> nil
print(type(type(X))) --> string
boolean(布尔)
- false: nil 和 false
- true: 其他的都为 true
string(字符串)
-- 与 js 相同,尝试转化为 number 计算
print("2" + 6)
-- 连接字符串
print("hello" .. "world")
table(表)
-- 表(table)
local tbl2 = {"apple", "pear", "orange", "grape"}
-- 遍历表
for k, v in ipairs(tbl2) do
print(k, v)
end
function(函数)
-- define a function
function sum(a, b)
return a + b
end
-- call a sum function
print(sum(1, 2))
thread(线程)- 略
userdata(自定义类型)-略
lua 变量
- 全局变量:直接声明就是全局的
- 局部变量:加 local 关键词
- 表中的域:
赋值
a, b, c = 0, 1
print(a,b,c) --> 0 1 nil
循环
-- 起始值,终止值,步长
for i=10,1,-1 do
print(i)
end
-- 针对 table
local days = {"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}
for i,v in ipairs(days) do
print(i, v)
end
流程 if .. else
--[ 0 为 true ]
if(0)
then
print("0 为 true")
end
函数
- 普通函数
- 能返回多值的函数
- 动态 arguments
-- 函数:sum
-- 功能:计算数组中的所有元素的和
-- 参数:n1,n2
function sum(n1, n2)
return n1 + n2
end
-- 函数,获取多值
function calc(n1,n2)
local s1 = n1+n2
local s2 = n1-n2
local s3 = n1 * n2
local s4 = n1 / n2
return s1,s2,s3,s4
end
print(calc(1,2))
-- 动态 arguments
function average(...)
local result = 0
local arg={...}
for i,v in ipairs(arg) do
result = result + v
end
print("总共传入 " .. select("#",...) .. " 个数")
return result/select("#",...)
end
print("平均值为",average(10,5,3,4,5,6))