Lua 基礎 呼叫函式時用點號還是用冒號

2022-09-02 10:39:08 字數 2112 閱讀 5979

本文**於:

我們來看看下面的兩句**:

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入門一文。這篇文...