lua中成員函式的定義應該約定一種形式而不要點和冒號同時使用
使用冒號宣告函式的時候會把self作為引數隱藏在裡面,如果這個時候用點就會報錯
-- 基礎類方法 new
function shape:new (o,side)
o = o or {}
setmetatable(o, self)
self.__index = self
side = side or 0
self.area = side*side;
self.perimeter = side*4;
return o
end-- 基礎類方法 printarea
function shape:printarea ()
print("面積為 :",self.area)
end-- 基礎類方法 perimeter
function shape:printperimeter ()
print("面積為 :",self.perimeter)
end-- 建立物件
myshape = shape:new(nil,10)
myshape:printarea();
myshape:printperimeter();
---------------------------------------
面積為 : 100
周長為 : 40
[finished in 0.1s]
我們可以使用點號(.)來訪問類的屬性;我們可以使用冒號 : 來訪問類的成員函式
myshape = shape:new(nil,10)
myshape:printarea();
myshape:printperimeter();
print(myshape.area)
----------------------------
面積為 : 100
周長 : 40
100[finished in 0.1s]
lua在函式定義時可以用點也可以用冒號
1.冒號宣告並呼叫
mytable =
function mytable:add(p)
print(self)
print(self.a)
print(p)
endmytable:add(5)
-----------------------
table: 0035b85025
[finished in 0.1s]
如果用冒號宣告的函式用點來呼叫 mytable.add(5) 就會報錯或者出現self為nil的結果;
如果我們用點呼叫的話就需要傳入乙個引數來充當self的角色
mytable =
function mytable:add(p)
print(self)
print(self.a)
print(p)
endmytable.add(mytable,5)
-----------
table: 0075b85025
[finished in 0.1s]
2.點宣告並呼叫
function mytable.subtract(m,n)
print(m)
print(n)
endmytable.subtract(7,10)
---------------710
[finished in 0.1s]
如果用冒號呼叫點宣告的函式:結果第乙個不是我們傳入的引數m=7,而是乙個table,而第二個才是我們傳入的引數7;
冒號呼叫以點定義的函式時,函式的引數的意義發生了變化,第乙個引數強制變為了表示自身的變數(此時的m等同於self),
mytable:subtract(7,10)
------------------------
table: 009bb8a0
7[finished in 0.1s]
1.冒號定義成員函式相比點定義可以減少乙個需要傳入自身的引數,內部用self來訪問自身;
2.點呼叫冒號定義的函式時,需要多傳入乙個引數,傳入的第二個引數開始才對應於原函式的引數列表,函式內部用到的self則變為對應於傳入的第乙個引數的普通變數,故傳入的第乙個引數應該當是呼叫者自身(當然如果函式內部並沒有用到self則第乙個引數隨便傳個什麼都行);
3.冒號呼叫點定義的函式時,原函式的第乙個引數強制變為等同於self的變數,傳入的引數從原引數的第二個引數開始才能一一對應上,因此通常這樣呼叫都是會出錯的(除非函式內部原本就把第乙個引數在當self用...)。
lua中成員函式的定義應該約定一種形式而不要點和冒號同時使用,不然呼叫者可能會不清楚該函式是否支援另一種方式的呼叫而增加出錯的可能。
Lua程式設計基礎 利器
正所謂 工欲善其事,必先利其器 對於乙個 碼農 來說,乙個好的編碼工具將令我們的程式設計過程變得方便而快速。首先我們就來了解一下這些常用的lua開發工具。lua作為一種指令碼語言,其編輯器可以說五花八門,txt sublime notepad 等都是可以使用的,並且體量非常小。專業一點的編輯器有官方...
Lua基礎學習 Lua函式
函式主要用途 1 是作為呼叫語句使用。2 作為賦值語句的表示式使用。語法 區域性 全域性 function fun name 引數列表 函式體endfunction 定義函式關鍵字注意 1 在使用 lua 函式 變數時一定要先定義函式 變數 2 lua 函式不支援引數預設值,可以使用 or 解決。如...
Lua核心程式設計之基礎
由於本人這個學期選了一門選修課 cocos2d x移動遊戲開發 所以想整理一下筆記了。不保證部落格的全面性,我只記一些我認為需要記錄的,最好的學習方式還是看書。學習資料 cocos2d x之lua核心程式設計 極客學院 老師的ppt 學習環境 mac os x,sublime text,cocos2...