2013-11-24 15 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

関連する問題