2013-11-24 80 views
9

我是一名正在學習Lua的JavaScript開發人員。我在Lua語言中遇到了一個函數的問題。獲取函數的功能

在JavaScript中,它很簡單:

function test (a, b) {} 
console.log(test.length) // 2 

怎麼可能做這樣很容易在Lua?

function test (a, b) end 
print(#test) -- gives an error.. 
+1

爲了避免XY問題,您還可以提供一些您正在嘗試解決的問題的背景嗎? – greatwolf

回答

7

這是隻能通過debug庫,但它是可能的。

print(debug.getinfo(test, 'u').nparams) -- number of args 
print(debug.getinfo(test, 'u').isvararg) -- can take variable number of args? 

請參閱herehere以獲取更多信息。


編輯:萬一你想與一些黑魔法玩...

debug.setmetatable(function() end, { 
    __len = function(self) 
     -- TODO: handle isvararg in some way 
     return debug.getinfo(self, 'u').nparams 
    end 
}) 

這將有可能使用上的功能的#長度運營商和提供JavaScript-esque的感覺。但請注意,這可能只適用於Lua 5.2及更高版本。

+0

謝謝!它工作得很好 – Kosmetika

+1

@Kosmetika我用一個你可能喜歡的技巧編輯了我的答案。讓我知道它是如何爲你工作的。 –

+0

我使用的是lua 5.1,但我會嘗試 – Kosmetika