2013-11-24 26 views
9

Ben Lua'yı öğrenen bir JavaScript geliştiricisiyim. Lua dilinde bir işlevin aritilmesi problemine takıldım. JavaScript'inizdeBir işlevin aritesini alın

, çok basit:

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

Nasıl Lua kolayca bunu yapmak mümkündür?

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

XY probleminden sakınmak için, bununla çözmeye çalıştığınız şeyin bir bağlamını da sağlayabilir misiniz? – greatwolf

cevap

7

Bu yalnızca debug kütüphanede yoluyla mümkündür, ancak bu mümkün.

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

fazla bilgi için here ve here bakınız.


Düzenleme: Bazı kara büyü ile oynamak istedim Sadece durumunda ... Bu da yapacak

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

fonksiyonları üzerine # uzunluk operatörünü kullanın ve temin etmek JavaScript-esque hissediyorum. Ancak bunun muhtemelen sadece Lua 5.2 ve üzerinde çalışacağını unutmayın.

+0

teşekkürler! Oldukça iyi çalışıyor – Kosmetika

+1

@Kosmetika Cevabımı istediğin gibi yapabildim. Nasıl çalıştığını bana bildirin. –

+0

lua 5.1 kullanıyorum ama – Kosmetika

İlgili konular