Lua笔记——基本概念

该文用于快速回顾Lua的知识。


基本概念和数据类型

注释:
单行 --
多行--[[    --]]


变量:
默认为全局
无需声明
未初始化变量为nil
删除变量:令变量=nil


数据类型:
用type(变量)查看数据类型
任何数字都是number类型(双精度)

字符串形式:[[字符串]] 或“字符串”
"12"+"34" 将会转换成1234(number)
#字符串  =字符串长度
字符串连接用..

表:
local t1 = {}  创造空表
local tb1 = {1,2,3,4}
local tb1 = {,2,3,4}
(local是局部变量的意思!)
#tb1是表的长度
t1[索引]=值  则插入一个索引和值
索引可以是字符串或number

表的默认初始索引从1开始

t[i]也可用t.i 或 gettable_event(t,i)


运算符:
^ 取幂
- 负号
~= 不等于
and 且
or 或
not 反
.. 字符串连接符
# 返回字符串长度

函数:
function factorial1(n)
--函数内容--
end 


function 可以以匿名函数(anonymous function)的方式通过参数传递:
-- function_test2.lua 脚本文件
function anonymous(tab, fun)
    for k, v in pairs(tab) do
        print(fun(k, v))
    end
end

tab = { key1 = "val1", key2 = "val2" }
anonymous(tab,   function(key, val)
    return key .. " = " .. val
end)

则function(key,val)就代表那个匿名函数,返回了fun,用作anoymous的参数
即匿名函数一般用来临时使用的。


脚本执行结果为:
$ lua function_test2.lua
key1 = val1
key2 = val2

thread(线程) :
在 Lua 里,最主要的线程是协同程序(coroutine)。它跟线程(thread)差不多,拥有自己独立的栈、局部变量和指令指针,可以跟其他协同程序共享全局变量和其他大部分东西。
线程跟协程的区别:线程可以同时多个运行,而协程任意时刻只能运行一个,并且处于运行状态的协程只有被挂起(suspend)时才会暂停。

userdata(自定义类型) :
userdata 是一种用户自定义数据,用于表示一种由应用程序或 C/C++ 语言库所创建的类型,可以将任意 C/C++ 的任意数据类型的数据(通常是 struct 和 指针)存储到 Lua 变量中调用。


基本语句

赋值语句:
可分开赋值  a,b=1,2
可交换赋值  a,b=b,a
可函数赋值  a,b=f()   --f()返回2个值
不可一个值赋给多个变量 例如a,b,c=0,则只有a=0.后面2个值为nil
a. 变量个数 > 值的个数             按变量个数补足nil
b. 变量个数 < 值的个数             多余的值会被忽略

循环语句:
while()
do
  内容
end

for var=起始数,终止数,间隔数 do 
    <执行体> 
end

若其中一个数是函数形式,只执行一次函数计算。
间隔数默认为1.
可取到终止数

泛型循环:
for i,v in ipairs(a)
    do print(v)
end
ipairs()是迭代器

pairs遍历表中全部key,value
ipairs从下标为1开始遍历,然后下标累加1,如果某个下标元素不存在就终止遍历。这就导致如果下标不连续或者不是从1开始的表就会中断或者遍历不到元素。
num={1,2,3,a="4",nil,5}
则实际上下标1-5为
1 2 3 nil 5
因此ipairs遍历时,检索到第四个就退出,并且不会检索到a="4"

repeat循环:(相当于 do while)
例子:
a=10
repeat
   print("a的值为:", a)
   a = a + 1
until( a > 15 )


判断语句:
注意,在lua中,认为0是真!
即false和nil为假,   true和非nil元素皆为真
if(条件1)
then
    print("0 为 true")
elseif(条件2)
then
    动作2
elseif(条件3)
then
   动作3
else
  动作4
end


函数


local(或无) function 函数名(可省略)(参数。。)
    函数体
    return 返回值可有多个 ,用逗号隔开
end

也可以用
funname =function()      
     函数体
end 
则funname就代表那个函数

函数也可以做参数传递,用来在函数中使用函数

可变参数:
function f(...)
则可以在f中定义
local arg={...},则会收集,是一个表
#arg是表的长度
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值