lua学习

userdata 表示任意存储在变量中的C数据结构
table Lua 中的表(table)其实是一个"关联数组"(associative arrays),数组的索引可以是数字或者是字符串。在 Lua 里,table 的创建是通过"构造表达式"来完成,最简单构造表达式是{},用来创建一个空表。


对于全局变量和 table,nil 还有一个"删除"作用,给全局变量或者 table 表里的变量赋一个 nil 值,等同于把它们删掉


boolean 类型只有两个可选值:true(真) 和 false(假),Lua 把 false 和 nil 看作是"假",其他的都为"真


字符串连接..
--连接两个字符串
print("12" .. "45");
--连接两个数字,..符号两个有空格
print(12 .. 45);


#计算字符串长度
print(#"12");
len = "hello world";
print(#len);


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


table function


Lua 变量有三种类型:全局变量、局部变量、表中的域。
Lua 中的变量全是全局变量,那怕是语句块或是函数里,除非用 local 显示声明为局部变量。变量的默认值均为 nil。


b = "good";
c = 1243;
print(b, c, b, c);


c = b .. " morning";
print(c);


如果要对多个变量赋值必须依次对每个变量赋值。
a, b, c = 0, 0, 0




a, b = f()
f()返回两个值,第一个赋给a,第二个赋给b。
应该尽可能的使用局部变量,有两个好处:
1. 避免命名冲突。
2. 访问局部变量的速度比全局变量更快




控制结构的条件表达式结果可以是任何值,Lua认为false和nil为假,true和非nil为真。
要注意的是Lua中 0 为 true:




function getMax(num1, num2)
if (num1 > num2) then
return num1;
else
return num2;
end;
return resutl;
end;


print(getMax(3, 5));




在 Lua 索引值是以 1 为起始,但你也可以指定 0 开始




for将用exp3作为step从exp1(初始值)到exp2(终止值),执行loop-part。其中exp3可以省略,默认step=1


for init,max/min value, increment


if for while 以 end作为结尾


lua不支持switch,所以一连串的if elseif是很常见的


for循环的3个表达式的值是在循环开始前一次性求值的。另外,控制变量会被自动的声明为for循环的局部local变量,仅在循环体内可见。


lua中的字符串是不可变值。


lua既可以调用自身Lua语言编写的函数,又可以调用以c语言编写的函数。


table类型实现了关联数组,关联数组是一种具有特殊索引方式的数组。在lua中,table既不是值,也不是变量,而是对象。可以将table想象成一种动态分配的对象,程序仅持有一个对它们的引用(或指针),Lua不会暗中产生table的副本或创建新的table。table的创建是通过构造函数表达式完成的,最简单的构造表达式就是{};
如:
a = {};创建了一个table,并将它的引用存储到a


table可以用不同类型的索引来访问value值,当需要容纳新条目时,table会自动增长。


-- test4.lua begin

module("test4", package.seeall);


function getTab(r, i)
return {r = r, i = i};
end




function getTabNum(tab)
local count = 0;
for key, val in pairs(tab) do
count = count + 1;
end
return count;
end


-- test4.lua end



-- test5.lua begin

require("test4")


tab = {1, 2, 3, 56, 8};


print(test4.getTabNum(tab));


-- test5.lua end




运行lua程序块的一种方式dofile,这个函数会立即执行一个文件。也就是会加载该文件中的程序。如果要测试一段代码,dofile比较有用,可以同时打开两个窗口,一个文本编辑器用于编辑代码文件,如hello.lua文件,另一个命令行窗口中运行解释器的交互模式,当编辑完成代码并保存后,可以在解释器的交互模式窗口中执行dofile("hello.lua")来加载新的代码,这样便可以测试新代码,调用其中的函数并打印结果了。


lua全局变量不需要声明,只需要将一个值赋予一个全局变量就可以创建了,在Lua中,访问一个未初始化的变量不会引发错误,访问结果是一个特殊的nil值。
通常没有必要删除一个全局变量,如果一个变量只有较短的生命周期,那么就应该使用局部变脸,但是如果一定要删除某个全局变量的话,只需将其赋值为nil,在赋值之后,Lua就好像从未使用过这个变量一样,换句话来说,如果存在一个全局变量,那么它必定有一个非nil值。


lua中有8中数据类型:nil, boolean, number, string, userdata自定义, function函数,thread线程,table表。函数type可以返回变量类型。


一个全局变量在第一次赋值前的默认值就是nil,将nil赋值给一个全局变量就等同于删除它。lua将nil用于表示一种无效值的情况,即没有任何有效值的情况。


boolean取值为false或true,Lua将false和nil视为假,其他为真,即使0和空字符串也为真。


lua的number类型可以表示整数、浮点数等


lua的string类型字符串是不可变的指,不能像C语言那样直接修改字符串的某个字符,而是应该根据修改要求来创建一个新的字符。字面字符串需要一对双引号或单引号来界定。


lua table类型实现了“关联数组”。


lua既可以调用以自身Lua语言编写的函数,又可以调用以C语言编写的函数,Lua所有的标准库都是用C语言写的,标准库中包括对字符串的操作,table的操作,I/O操作,操作系统功能调用,数学函数和调试函数。


连接两个字符串,可以使用操作符..  如果其中任意一个操作数是数字的话,Lua会将该数字转换为一个字符串。print("hello" .. "world"), print(0 .. 4)
谨记,Lua中的字符串是不可变的值,连接操作符只会创建一个新的字符串,而不会对其原操作数进行任何修改:
如:
a = "hello"
print(a .. " world");
print(a) --仍然是hello


相对于全局变量,Lua还提供了局部变量,通过local语句来创建局部变量。如:
j = 10; --全局变量
local i = j; --i是局部变量


尽可能使用局部变量是一种良好的编程风格,局部变量可以避免将一些无用的名称引入全局环境,避免搞乱了全局环境。


lua中的控制结构中的条件表达式可以是任何值,lua将所有不是false和nil的值视为真,比如0和空串都为真。


lua允许函数返回多个值:
s, e = string.find("hello lua users", "lua");




loadstring


require,用于使用模块;module用于创建模块
一个模块就是一个程序库,可以通过require来加载,然后得到一个全局变量,表示一个table,这个table就像一个名称空间,其内容就是模块中导出的所有东西,包括函数和常量。一个规范的模块还应使require返回这个table。如果希望使用较短的模块名称,则可以为模块设置一个局部名称local m = require "mod"; m.foo();


pairs()函数遍历整个table


.table是一个“关联数组”,数组的索引可以是数字或者是字符串


//以下两种方法都可以用来获取talbe中元素个数
print(table.getn(mytable))
print(#mytable);


无论任何类型,type(x)返回的是字符串,如number是一个字符串,nil是一个字符串,string是一个字符串


[[……]]里面可以包含字符串,可以多行,也可以嵌套,而且也不会被转义,用来包含一段代码是很方便的。


if elseif 要有then ,结束要 有end
function结束要有end


当一个字符串使用算术操作时,会被转换为数字
print("10" + 1); -- 11
print("hello" + "good"); --wrong,字符串连接用..
print(12 .. 34); --也可以用来连接两个数字,结果1234


lua中的函数可以有名字也可以是匿名的




linux库  /lib
头文件  /usr/include /usr/local/include 
ldd test可以查看可执行文件test用了哪些库


编译时默认连接C库,如果要用其他库,编译时要用-l,例如数学库-lm, C库-lc


core文件是系统进程出现异常退出时候,保存的上下文信息,在调试的时候需要用到


cat -n         



















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值