在研究cocos2d lua引擎原始碼的時候,看到framework\cc\components\component.lua中有這段**
function component:exportmethods_(methods)
self.exportedmethods_ = methods
local target = self.target_
local com = self
for _, key in ipairs(methods) do
if not target[key] then
local m = com[key]
target[key] = function(__, ...)
return m(com, ...)
endend
endreturn self
end
當時就感覺奇怪,」
target[key] = function(__, ...)
「為什麼要寫成這樣,直接target[key] = function(...)不就成了嗎。這讓我想起引擎中的類的方法定義,通常都是xxclass:xxfun(...),據說":"這個符號的意思是把擁有這個方法的例項指標當成第乙個引數並傳遞給xxfun,後面再新增"..."的引數。下面舉了些例子,會更加直觀。我們先在乙個類中定義乙個方法:
if self ~= nil then
if type(self)=="table" then
print("self is table")
else
print("self is:"..self)
endelse
print("self is nil")
endlocal args =
for n,m in ipairs(args) do
if type(m) ~= "table" then
print(n..">>>>>>"..m)
endend
end
再來看看,如果我加的**是self.okwell("aa","bb"),注意是「."不是":"了,看看效果:
回到正題,target[key] = function(__, ...),意思相當於 target.key(__, ...), 相當於target:key(...),所以當我們要呼叫這個方法的時候,就類似於引擎裡的其他方法一樣來呼叫即可,例如 target:key(a,b,c)。
深入理解 Python 的 「 」 和 「is」
python 3.6 0 anaconda 4.3 1 64 bit default,dec 23 2016,11 57 41 msc v.1900 64 bit amd64 on win32 or license for more information.obj1 a b c obj2 obj1 ...
深入理解C語言 深入理解指標
關於指標,其是c語言的重點,c語言學的好壞,其實就是指標學的好壞。其實指標並不複雜,學習指標,要正確的理解指標。指標也是一種變數,占有記憶體空間,用來儲存記憶體位址 指標就是告訴編譯器,開闢4個位元組的儲存空間 32位系統 無論是幾級指標都是一樣的 p操作記憶體 在指標宣告時,號表示所宣告的變數為指...
mysql 索引深入理解 深入理解MySql的索引
為什麼索引能提高查詢速度 先從 mysql的基本儲存結構說起 mysql的基本儲存結構是頁 記錄都存在頁裡邊 各個資料頁可以組成乙個雙向鍊錶每個資料頁中的記錄又可以組成乙個單向鍊錶 每個資料頁都會為儲存在它裡邊兒的記錄生成乙個頁目錄,在通過主鍵查詢某條記錄的時候可以在頁目錄中使用二分法快速定位到對應...