Lua学习笔记

来源:互联网 发布:淘宝格子铺是什么 编辑:程序博客网 时间:2024/06/05 11:58

Lua学习笔记
见http://www.runoob.com/lua/lua-tutorial.html

注释

– 表示单行注释

–[[
多行注释
–]]

标识符

同C,不能以数字开头,区分大小写,最好不要使用下划线加大写字母的标识符

全局变量

如果不存在,则输出nil,如果想删除一个全局变量,只用使用nil将其赋值(默认情况下变量总是全局变量),nil表示变量不存在

Lua数据类型

nil 表示一个无效值,在条件表达式中相当于false
boolean 包含两个值 false和true
number 表示双精度的实浮点数
string 由双引号或单引号表示;用两个方括号表示一块字符串,如:[[jskdjskdjkscnjadjakdjakd]]
function 由C或Lua编写的函数
userdata 表示任一存储在变量中的C数据结构
thread 表示执行的独立线路,用于执行协同程序
table 关联数组,索引可以是数字或者字符串(相当于map)

关于下面的匿名函数有一点不太理解。。。以后见到在回来看
其中的..”=”..表示的是什么:表示的是字符串连接
还有pairs表示什么

-- function_test2.lua 脚本文件function anonymous(tab, fun)    for k, v in pairs(tab) do        print(fun(k, v))    endendtab = { key1 = "val1", key2 = "val2" }anonymous(tab, function(key, val)    return key .. " = " .. valend)

线程跟协程的区别

线程可以同时运行多个,而协程任意时刻只能运行一个,并且处于运行状态的协程只有被挂起时才会暂停

变量

Lua变量的类型:全局变量,局部变量,表中的域
一般为全局变量,只有用local声明的变量才为局部变量,该作用域是从声明的位置开始到所在语句块结束
变量的默认值是nil
对多个变量赋值:a,b=10,2*x 会先执行右边的语句,然后进行赋值语句
当变量个数和值的个数不一致时,Lua会采取如下:变量个数>值的个数 按变量的个数补足nil;变量个数<值的个数 多余的值会被忽略
a,b=f() f()返回两个值,第一个赋值给a,第二个赋值给b
应该尽可能的使用局部变量,有两个好处: 避免命名冲突,访问局部变量的速度比全局变量的速度快
对索引的操作: 可以使用t[i]或t.i

循环

举个例子:

while(true)do  print("循环一直进行下去")end

判断语句中,Lua认为false和nil为假,true和非nil为真;因此0别认为是true

if(0)then    print("0为 true)end>>0为 true

函数定义

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

optional_function_scope function function_name( argument1, argument2, argument3..., argumentn)    function_body    return result_params_comma_separatedend
解析:
optional_function_scope
该参数是可选的制定函数是全局函数还是局部函数,未设置该参数默认为全局函数,如果你需要设置函数为局部函数需要使用关键字 local。
function_name:
指定函数名称。
argument1, argument2, argument3…, argumentn:
函数参数,多个参数以逗号隔开,函数也可以不带参数。
function_body:
函数体,函数中需要执行的代码语句块。
result_params_comma_separated:
函数返回值,Lua语言函数可以返回多个值,每个值以逗号隔开。
可变参数:使用…
function average(...)  result=0  local arg={...}  for i,v in ipairs(arg) do    result=result+v  end  print("sum"..#arg)  return result/#argendprint("average",average(10,5,3,4,5,6))--这个里面的ipairs不太理解

关系运算符

== 等于~= 不等于> 大于< 小于>= 大于等于<= 小于等于

逻辑运算符

and 逻辑与or 逻辑或not 逻辑非

其他

.. 表示字符串连接# 返回字符串或表的长度

字符串操作

大小写转换
string1=”Lua”
print(string.upper(string1))
print(string.lower(string1))
字符串查找 string.find(“Lua Tutorial”,”Tutor”) 返回的是下标
反转 string.reverse(“Lua Tutorial”) 返回反转的字符串
字符串格式化
date = 2; month = 1; year = 2014
print(string.format(“日期格式化 %02d/%02d/%05d”, date, month, year))
输出:日期格式化 02/01/02014

数组

一位数组

array={"Lua","Tutorial"}for i=0,2 do  print(array[i])end

以上代码输出的是:
nil
Lua
Tutorial
表示的是默认数组的下标是从1开始的,因此0返回的是nil
可以指定为负数,如下面的代码

array = {}for i= -2, 2 do   array[i] = i *2endfor i = -2,2 do   print(array[i])end

迭代器(iterator)

关于paris和ipairs的区别,详见http://www.runoob.com/lua/lua-iterators.html
ipairs仅仅只能遍历值,按照索引升序遍历,索引中断停止遍历,即不能返回nil

table的使用

table.concat()
fruits = {“banana”,”orange”,”apple”}
print(“连接后的字符串 “,table.concat(fruits)) bananaorangeapple
print(“连接后的字符串 “,table.concat(fruits,”, “)) banana, orange, apple
print(“连接后的字符串 “,table.concat(fruits,”, “, 2,3)) orange, apple

table.insert()
fruits = {“banana”,”orange”,”apple”}
table.insert(fruits,”mango”)
print(“索引为 4 的元素为 “,fruits[4]) 索引为 4 的元素为 mango
table.insert(fruits,2,”grapes”)
print(“索引为 2 的元素为 “,fruits[2]) 索引为 2 的元素为 grapes
print(“最后一个元素为 “,fruits[5]) 最后一个元素为 mango
table.remove(fruits)
print(“移除后最后一个元素为 “,fruits[5]) 移除后最后一个元素为 nil

table.sort() 排序

require 函数

原创粉丝点击