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