2011-07-23 77 views
3

這兩種聲明在性能方面是否有區別?Lua中的方法聲明

local object = newObject() 

function object:method(params) 
end 

local object:method = function(params) 
end 

回答

7

是的,有區別。第二個不編譯。所以它沒有任何性能;)

「方法聲明」只是Lua中的語法糖。這些是相同的:

function object.func(self, param) 
end 

function object:func(param) 
end 

但糖只有的作品,如果你命名的功能函數聲明的一部分。

在Lua中訪問「方法」的':'語法只能用於訪問存儲在表中的函數,該表由字符串鍵來命名。您不能使用此語法來設置表的值。

或者,換一種說法,有沒有其他辦法可以做到這一點:

function object:func(param) 
end 

沒有明確指定一個「自我」參數作爲第一個參數。

+0

謝謝!我在所謂可信的資源上閱讀這篇文章,應該自己嘗試過。那裏好幽默:) – Vitaly