2012-09-27 24 views
2

是否有可能區分功能myFunc的內部呼叫檢測LUA單個零參數

myFunc() 

myFunc(nil) 

+2

我不這麼認爲。此外,你爲什麼要這樣做? –

+0

這是一個奇怪的例子,我正在用getter/setter繪製一個基本系統,lua使用metamethods __index,__newindex對此有着出色的支持。然而,我想保持這個簡單,因爲我也打算支持一個js後端(我正在生成代碼) – teadrinker

+0

「這是一個奇怪的情況」似乎就夠了。 –

回答

8

在Lua函數中,實際上可以將nil的值與無值相區分,假設他們期望使用...運算符的變量數量的參數。儘管如此,這不是非常簡單也不合理的。例如:

function myFunc(...) 
    if select('#', ...) == 0 then 
    print "Called without argument" 
    elseif select('#', ...) == 1 and select(1, ...) == nil then 
    print "Called with a nil argument" 
    end 
end 
+1

有趣的是,'#{...}'在這種情況下不起作用,而'select('#',...)'做。 'select'在'1,nil,2'的情況下也能正常工作,而'#{...}'返回1(如文檔所述)。 –