lua基础

来源:互联网 发布:淘宝客不战 编辑:程序博客网 时间:2024/05/22 04:58

–lua有哪些类型
number、string、boolean、nil,function,table,thread,userdata

–如何获取lua的表的长度,需要注意什么

+表名 表是从1开始的

–输出9*9
for i=1,9 do
str = “”;
for j=1,i do
str=str .. “\t” .. i .. “*” .. j .. “=” .. i*j;
end
print(str);
end

–冒泡排序
array={1,4,5,2,3};
–array[1]从1开始
–table.maxn(array);数组的大小
function sort( array )
for i=1,table.maxn(array)-1 do
for j=1,table.maxn(array)-i do
if array[j]>array[j+1] then
array[j],array[j+1]=array[j+1],array[j];
end
end
end
end

–数组和字典混合使用的形势,字典是不占用下标的
–有=的相当于字典形势,使用字典的输出模式

ipairs:只输出数组形势的 遇到nil就终止了
pairs:可以输出全部内容

–闭合函数就是在一个函数中存在一个函数和一个相对的非局部变量。 函数和变量的生命周期相同,变量具有静态变量的特点

–所谓的尾调用,就是在函数最后执行的还是一个函数,这样的函数不会有入栈的操作,会节省空间。

a,b=pcall(div,1,0);
–函数 传递的参数
–如果正确调用 a true b函数的返回值
–如果错误 a false b错误信息
–不影响继续调用

–pcall的有几个返回值,代表什么意义
2个返回值,第一个返回值是true或false,第二个参数是函数的返回值/错误信息

– f=loadfile(“8.lua”); –只是将8.lua(指定文件)的代码放入到一个函数中,并且将函数返回,函数没有执行
– dofile(“8.lua”); –每次 dofile 都会将我们的代码执行一次
–require(“8”); –只需要写文件的名字 且只在第一次调用执行代码

—设置元表
setmetatable(t1, mt); – 设置mt 为t1 的元表

–元表的的固定字段
给其中一个表添加元表,元表._add=函数,在函数中实现对应元素相加,在执行两表的加法即可
使用:mt.__add
–__add 加法
–__sub 减法
–__mul 乘法
–__div 除法
–__unm 相反数
–__mod 取模(取余)--除之后的余数
–__pow 乘幂

–逻辑类的
–__eq:等于 –not__eq
–__lt:小于 –not__lt
–__le:小于等于 –not__le
将两个表都设置元表,并且两个表的元表相同,元表.__eq=函数,函数中实现比较操作

–__index 的作用
在一个表有元表,且元表中有__index关键字的时候,查找元素,如果本表有则输出,如果没有,就去查找元表,如果__index调用函数则执行函数,如果是表,则去表中查找。

–__newindex的作用–
在一个表有元表,且元表有__newindex时,给表赋值的时候,如果有值, 则覆盖原来的值;如果没有元素,没有这个元素直接添加;有元表且 __newindex有则替换,没有不添加;如果是函数,调用函数;如果是一个表 则将元素添加到这个表里面去

–lua中如何实现一个类的
用一个表来模拟一个类,在其他表调用该表时将其封装在_G中,作为另一个表的元表来调用

–lua中number a = b那么a与b的关系是
值相等

–lua中table t1 = t2 那么t1与t2的关系是
指向同一个表

–lua中a,b = b,a是做了什么事情
交换值

–quick的class函数帮我们做了什么事情
class 是一个函数 帮我创建一个类 第一参数是类名 第二个参数是:父类(继承自谁)
返回的表里面 直接添加了一个new函数
在new函数里面调用了一个名为ctor的函数
第二个参数 也可以写一个函数
如果是一个函数,那么继承自函数的返回值

–quick的handler函数有什么作用
在函数传递参数的时候,有时候会少传一个参数导致在其他函数中调用的时候使用了错误的参数,handler可以多传一个参数,保证传参的正确性

–下面的代码输出什么值,为什么?
t1 = {x=1};
t2 = {y=2};
t3 = {z=3};
setmetatable(t1, t2);
setmetatable(t2, t3);
t2.__newindex = t3;–t3.__newindex = t2
t3.__newindex = t3;–t3.__newindex = t3
t2.__index = t2; –t3.__index = t2
t3.__index = t3; –t3.__index = t3
t2.__newindex = t2;
t2.__index = t2;
t3.__index = t3;
print(t1.x)
print(t1.y)
print(t1.z)
1,nil,nil

–module(“Game”,package.seeall)
–模块 相当于命名空间
–package.seeall 如print找不到,就到_G中去找

–1、 点号’.’和冒号’:’的区别
–声明的时候使用“.”,会多接收一个参数 self
–调用的时候,使用“:”,多传递一个参数 冒号前面的对象
–2、self 是形參

–弱引用表
t = {};
setmetatable(t, {__mode = “kv”}); –只能为k(键),v(值),kv
key1={name = “key1”};
t[key1]=1;
key1=nil;
collectgarbage(); –强制进行一次垃圾回收
for key,value in pairs(t) do
print(key.name .. “:” .. value);
end
–弱引用表就是在定义元表的时候,采用关键字__mode来完成弱引用

0 0
原创粉丝点击