Lua学习笔记

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))
    end
end
tab = { key1 = "val1", key2 = "val2" }
anonymous(tab, function(key, val)
    return key .. " = " .. val
end)
线程跟协程的区别

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

变量

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_separated
end
解析: 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/#arg
end
print("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 *2
end
for 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 函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值