Lua入门总结

1.环境配置(使用eclispe的独立LDT)

下载地址:http://www.eclipse.org/koneki/ldt/

2.Lua的变量逻辑控制函数方法面向对象的2种实现方法

2.1变量无类型,直接赋值

注意:变量或者方法默认是全局的,局部变量或方法要加上 local

--Lua所有数字都是浮点型,var是全局变量,var2是局部变量
--只有nil和false表示逻辑假,连0也是true
var = 1
local var2 = "hello lua"
print(var,var2)

2.2逻辑控制(if,for和while)

注意:do 和 end 就相当于 大括号{} 用与划分程序段

if num > 40 then 
  print('over 40') 
  -- ~= 表示不等于。
  -- 像Python一样,== 表示等于;适用于字符串。 
elseif s ~= 'walternate' then   
  io.write('not over 40\n')  -- 默认输出到stdout。 
else 
  -- ..操作符用于连接字符串: 
  print('Winter is coming, ' .. line) 
end 

--var的变化范围是1到100,包括端点1和100
for var=1, 100 do
	print(var)
end

while num < 50 do 
  num = num + 1  -- 没有 ++ or += 运算符。 
end 
2.3函数方法

function sayHello()
  print("hello Lua")	
end
sayHello()
2.4表

--创建people表,并赋值初始化
people = {}
people["mok"] = 20
people["lackest"] = 21
print(people.mok) --20
--遍历表,输出所有的键值对
for key, var in pairs(people) do
  print(key,var)
end

--两个表之间不能直接进行运算
--必须进行运算符重载,而Lua的方法是用元表和元方法
--本质就是一个元表里面写一个元方法,再把这个表与另一个表绑定在一起

-- 创建一个元表,写一个元方法

    local mt = {};

    mt.__add = function(t1, t2)
        print("将两个表相加吧");
    end

    local t1 = {};
    local t2 = {};

    -- 给两个table设置新的元表

    setmetatable(t1, mt);

    setmetatable(t2, mt);

   -- 进行加法操作

    local result = t1 + t2;

2.5面向对象的2种实现方法

第一种:通过复制表的方式实现

思路:

(1)创建父表people,子表men

(2)写全局方法clone,返回self,用于初始化表,相当于C++的new

(3)写全局方法copy,把子表的所有数据,增加到父表的备份中,这样就可以从备份中调用父表的方法,实现继承

--创建一个全局复制表的方法
function clone(tab)
  local temp = {}
  for key, var in pairs(tab) do
     temp[key] = var
  end
 return temp
end

--创建copy方法,dist是父表
function copy(dist,tab)
	for key, var in pairs(tab) do
		dist[key] = var
	end
end 

--创建父表,里面有new,和sayHi方法
people = {}

 --people的初始化方法,类似C++的new
people.new = function(name)
  local self = clone(people)
    self.name = name
    return self
end
 
people.sayHi = function(self)
    print(self.name.."say Hi to you")
end
 

 --创建子表,里面有new,和sayHello方法
 men = {}
 men.new = function (name)
   local self = people.new(name)  --拷贝一份父表
 	 copy(self,men) --将子表的一切,添加带父表的备份中,从备份中调用父表方法,实现继承
 	 return self 
 end
 
 men.sayHello = function()
   print("men say Hell to you")
 end
 
 --调用父表方法
 local m = men.new("Lackest")
 m:sayHi()
第二种:使用闭包函数实现,类似C++的class,成员默认是public,变成private要加上local

思路:在子函数里面,备份父函数,调用备份的方法,实现继承

--创建父函数当作父类
function People(name)
  local self = {}

  local function init()
    self.name = name
  end

  self.sayHi = function ()
    print("Hello "..self.name)
  end

  init()
  return self
end

--创建子函数当作子类
function Man(name)
  local self = People(name)  --获取父函数的备份,调用备份的方法,实现继承
  
  self.sayHello = function ()
    print("Hi "..self.name)
  end
  
  return self
end

--调用父函数的方法
local m = Man("Lisi")
m:sayHi()






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值