2015-04-04 8 views
7

मैं एक नया लुआ फ़ंक्शन बनाना चाहता हूं।विस्तारित लुआ: फ़ंक्शन में पारित पैरामीटर की संख्या

फ़ंक्शन पैरामीटर पढ़ने के लिए मैं पैरामीटर के साथ फ़ंक्शन का उपयोग कर सकता हूं (मैं this link का पालन कर रहा हूं)।

static int idiv(lua_State *L) { 
    int n1 = lua_tointeger(L, 1); /* first argument */ 
    int n2 = lua_tointeger(L, 2); /* second argument */ 
    int q = n1/n2; int r = n1 % n2; 
    lua_pushinteger(L, q); /* first return value */ 
    lua_pushinteger(L, r); /* second return value */ 
    return 2; /* return two values */ 
} 

मैं आदेश संदेश मुद्रित करने के लिए उपयोगकर्ता दो मापदंडों के साथ समारोह फोन नहीं करता है तो में एक तरह से एक समारोह के लिए पारित पैरामीटर की संख्या पता करने के लिए है या नहीं, जानना चाहते हैं।

मैं जब उपयोगकर्ता

idiv(3, 4) 

लिखते हैं और एक त्रुटि प्रिंट जब

idiv(2) 
idiv(3,4,5) 
and so on... 
+1

लुआ में हमेशा की तरह व्यवहार अतिरिक्त तर्क के बारे में शिकायत करने के लिए नहीं है। – lhf

+0

और कम तर्क के बारे में क्या? – Jepessen

+1

कम तर्क एक और कहानी है। यदि समझदार डिफ़ॉल्ट का उपयोग किया जा सकता है, तो ऐसा करें। अन्यथा, एक त्रुटि उठाओ। वास्तव में – lhf

उत्तर

9

आप एक सी लुआ समारोह के लिए पारित तर्क की संख्या निर्धारित करने के लिए उपयोग कर सकते हैं lua_gettop() समारोह निष्पादित करने के लिए करना चाहते हैं:

int lua_gettop (lua_State *L);
स्टैक में शीर्ष तत्व की अनुक्रमणिका देता है। चूंकि सूचकांक 1 से शुरू होते हैं, यह परिणाम स्टैक में तत्वों की संख्या के बराबर होता है (और इसलिए 0 का मतलब खाली स्टैक होता है)।

static int idiv(lua_State *L) { 
    if (lua_gettop(L) != 2) { 
    return luaL_error(L, "expecting exactly 2 arguments"); 
    } 
    int n1 = lua_tointeger(L, 1); /* first argument */ 
    int n2 = lua_tointeger(L, 2); /* second argument */ 
    int q = n1/n2; int r = n1 % n2; 
    lua_pushinteger(L, q); /* first return value */ 
    lua_pushinteger(L, r); /* second return value */ 
    return 2; /* return two values */ 
} 
+0

धन्यवाद। यही वही है जो मुझे चाहिए! – Jepessen

संबंधित मुद्दे