LUA基礎學習第三天

2021-09-13 19:52:31 字數 3707 閱讀 2635

物件導向

metatable =

mytable ={}

//將metable設定為mytable的元素, 類似metatable為父類,繼承

setmetatable( mytable,metatable)

當表中不存在該目標key時,通過index可以在元表中進行查詢 q1

當表中存在該目標key時,不會去執行__index方法,也就不會去元表中查詢 q2

print(mytable.key1)    --nil

metatable.__index = metatable

print(mytable.key1) --1 設定index方法後,q2執行

mytable.key1 =10 --10 相當於給表新新增建, 但並沒有修改元表中的值

print(metatable.key1) --1

不能進行設定,只能get

可以通過子表修改元表中的值

可以通過子表向元表中新增新的值

metatable.__newindex = metatable

mytable.key1 =10 --修改元表中的值

mytable.key2 =20 --新增新的值

print(metatable.key1) --10

print(metatable.key2) --20

print(mytable.key1) --nil

metatable.__index  = function (  )

print("沒有此鍵")

endprint(mytable.key1)

不能查詢,只能修改

可以通過子表修改元表中的值

可以通過子表向元表中新增新的值

metatable.__newindex = metatable

mytable.key1 =10 --修改元表中的值

mytable.key2 =20 --新增新的值

print(metatable.key1) --10

print(metatable.key2) --20

print(mytable.key1) --nil

metatable.__newindex = function(tab,key,val)

local mtab = getmetatable(tab) --獲取元素

mtab[key] = val --設定元素的值

--mtab.key = val --插入新的值

endmytable.key1 =20

metatable = {}

tab1 =

setmetatable(tab1,metatable)

metatable.__add = function(t1,t2)

for k,v in ipairs (t2) do

table.insert(t1,v)

endreturn t1

endtab2 =

temp = tab1+tab2

print(#temp) -- 6 說明新增成功

metatable ={}

metatable.__mod = function(tab,val)

for k,v in ipairs (tab) do

tab[k] = v % val

return tab

endtab1 =

setmetatable(tab1,metatable)

res = tab1 %10

for i,v in ipairs (res) do

print(i,v)

end

bagclass.lua

local bagclass =

--構造

function bagclass.new()

local o ={}

bagclass.__index = bagclass

setmetatable(o,bagclass)

return o

end--成員函式

function bagclass : tostring()

return string,format( "id:%d,name:%s,level:%d,star: %d, ref :%s",

self.id,self.name,self.level,self.star,self.ref

)return bagclass

bagmanager.lua

bagclass = require "bagclass"

bagmanager = {}

local this = bagmanager

bagmanager.data = ,

, ,, ,

, }

bagmanager.bagdic = {}

-----table.remove(this.bagdic,10)

function bagmanger.parsedata()

for i,v in ipairs (this.data) do

local item = bagclass.new()

local index =1

item.id = v[index]; index = index +1

item.name = v[index];index = index + 1

item.level = v[index];index = index + 1

item.star = v[index];index = index + 1

item.ref = v[index];index = index + 1

table.insert(this.bagdic,item)

endend

function bagmanager.sort()

for i=1,#this.bagdic -1 do

for j=1,#this.bagdic -i do

if this.bagdic[j].level == this.bagdic[j+1].level then

if this.bagdic[j].star> this.bagdic[j+1].star then

this.bagdic[j],this.bagdic[j+1] = this.bagdic[j+1],this.bagdic[j]

-- temp = a; a = b; b = temp

endelse

if this.bagdic[j].level > this.bagdic[j+1].level then

this.bagdic[j],this.bagdic[j+1] = this.bagdic[j+1],this.bagdic[j]

endend

endend

endthis.parsedate() -- 呼叫排序方法

for k,v in ipairs (this.bagdic) do

print(k,v:tostring())

end

c 基礎學習第三天

對第二天所學內容深入 工具vs2005 ps 再對面向過程程式設計和物件導向程式設計進行解釋。例如 八戒吃西瓜 1 八戒.吃 西瓜 物件導向,第一位是物件 2 吃 八戒,西瓜 面向過程,第一位是函式 吃這個動作即是函式來實現的 原有 存在的一些問題 當我們建立物件後,物件就應該具有相應的屬性,而不是...

學習第三天

額,又是美好的一天!祝賀比利時奪得季軍!下面,還是先看資訊學 今天繼續看倍增。這道題是和倍增沾邊的題,額,其實就是兩邊floyd。但是思路還是可以借鑑的。這道的思路是,使用兩個陣列,乙個是f k u v 這個陣列表示節點u到節點v之間是否距離為2 k,如果是,則為1,否則為0.代表u和v之間是否1s...

學習第三天

等價類是建立在這種思想之上 即我們不可能進行窮舉測試,那麼我們就 必須對輸入進行分類,而這種分類是建立在我們知道計算機程式設計原理和 計算機處理單元的工作原理基礎之上的,程式是通過資料結構和演算法來實現 的,計算機是按照演算法來執行程式的,這種執行是穩定的,不會因為我們的 輸入而導致計算機處理不穩定...