本文**於:
我們來看看下面的兩句**:
msprite.setposition(100, 20);msprite:setposition(
100, 20);
對於初次接觸lua的朋友來說,這簡直就是噩夢,為嘛函式的呼叫有兩種形式,是讓我們隨便挑的意思嗎?
這兩種形式是有區別的,區別很大,但只有乙個。
不過,暫時不解釋,後面再介紹。
我們先來看看簡單的,來建立乙個「類」試試,如下**:
tsprite =function tsprite.setposition(x, y)
tsprite.x =x;
tsprite.y =y;
endtsprite.setposition(
1, 2
); print(
"tsprite座標(
" .. tsprite.x .. "
," .. tsprite.y .. "
)");
其實就是建立了乙個table,給這個table新增一些字段而已。輸出結果如下:
[lua-print] tsprite座標(1,2)
大家留意一下setposition函式,函式裡其實也是通過tsprite來呼叫x和y欄位的。
並且,我們使用setposition的方式是,使用點號,這是正宗的函式呼叫方式,記住了。
local who =tsprite;tsprite =nil;
who.setposition(
1, 2);
這麼做一定會報錯,雖然通過who確實可以成功呼叫setposition函式,但函式裡需要用到tsprite,而此時的tsprite已經為nil了。
於是,聰明的我們可以這麼做:
tsprite =function tsprite.setposition(self, x, y)
self.x =x;
self.y =y;
endlocal who =tsprite;
tsprite =nil;
who.setposition(who,
1, 2
); print(
"tsprite座標(
" .. who.x .. "
," .. who.y .. "
)");
輸出結果仍然是:
[lua-print] tsprite座標(1,2)
留意setposition的第乙個引數,我們強制要求傳入乙個引數,這個引數就是tsprite本身。
於是,在呼叫setposition函式時,傳入who,who的內容就是tsprite的內容,於是,setposition就能正常執行了。
如果你讓乙個高(chao)智(ji)商(lan)猿人每次建立函式和呼叫函式都要這麼去處理self,那他一定會說「你過來一下下,我保證不打死你」。
所以,lua提供了乙個新的使用方式,沒錯,那就是冒號。
看好了,我說的是,用冒號呼叫函式。
如下**:
tsprite =function tsprite:setposition(x, y)
self.x =x;
self.y =y;
endlocal who =tsprite;
tsprite =nil;
who:setposition(
1, 2);
第一,留意setposition函式的定義,使用了冒號;
第二,留意setposition函式的呼叫,使用了冒號。
使用了冒號之後,就相當於我們剛剛使用點號時一樣,只是我們不再需要顯式地定義self引數以及主動地傳遞who引數。
好了,這就是點號和冒號的區別了,可以說,冒號是為了給我們偷懶而誕生的。
如果是使用cocos2d-x lua來開發的話,大部分情況下都是使用冒號的。
原因很簡單,因為大部分情況下我們都要使用到self引數,就像c++的this關鍵字一樣。
Lua中呼叫函式使用點號和冒號的區別
這篇文章主要介紹了lua中呼叫函式使用點號和冒號的區別,本文涉及了lua中物件導向的一些的知識,並給出了乙個簡單的類 例項,需要的朋友可以參考下 本文是物件導向預熱篇,講解函式兩種呼叫方式的區別,初學者比較容易被坑。1.初學者最易混亂top1 呼叫函式時用點號還是用冒號?我們來看看下面的兩句 複製 ...
Lua中呼叫函式使用點號和冒號的區別
1.初學者最易混亂top1 呼叫函式時用點號還是用冒號?我們來看看下面的兩句 msprite.setposition 100,20 msprite setposition 100,20 對於初次接觸lua的朋友來說,這簡直就是噩夢,為嘛函式的呼叫有兩種形式,是讓我們隨便挑的意思嗎?這兩種形式是有區別...
呼叫Lua函式
翻譯自http gamedevgeek.com tutorials calling lua functions 呼叫lua函式 這是lua指令碼語言教程系列之二。在第一篇中,我們學習了在windows和linux下編譯並執行 hello,world 程式。如果你沒有看過,請參考lua入門一文。這篇文...