में लुआ फ़ंक्शन का संदर्भ मेरे पास टेबल के सेट में तुलनात्मक रूप से गहराई से कार्यरत हैं। क्या उस समारोह में "संदर्भ" प्राप्त करने के लिए सी/सी ++ में कोई तरीका है और जब मुझे इसका उपयोग करने की ज़रूरत है तो उस स्टैक पर उस (और तर्क) को दबाएं?सी/सी ++
सी/सी ++
उत्तर
यह reference system है। फ़ंक्शन कॉल r = luaL_ref(L, LUA_REGISTRYINDEX)
रजिस्ट्री में स्टैक के शीर्ष पर मान संग्रहीत करता है और एक पूर्णांक देता है जिसे सी पक्ष पर संग्रहीत किया जा सकता है और फ़ंक्शन कॉल lua_rawgeti(L, LUA_REGISTRYINDEX, r)
के साथ मान पुनर्प्राप्त करने के लिए उपयोग किया जाता है।
PiL chapter देखें, साथ ही पूर्ण कहानी के लिए luaL_ref()
, lua_rawgeti()
, और luaL_unref()
के दस्तावेज़ देखें।
लुआ एपीआई (http://www.lua.org/manual/5.1/manual.html#3) का उपयोग किसी भी टेबल सदस्यों को प्राप्त करने के लिए किया जा सकता है। तालिका सदस्य निकालने के लिए lua_gettable() का उपयोग करें और इसे लुआ स्टैक पर रखें, यदि सदस्य भी एक टेबल है, तो बस इस तालिका तक पहुंचने के लिए lua_gettable() को कॉल करें, और इसी तरह ...
(आप जो भी करते हैं उसके आधार पर lua_gettable())
addtional जवाब में टिप्पणी करने के लिए lua_rawget कर रहे हैं '() की तुलना में एक बेहतर विकल्प हो सकता है:
ठीक है कि थोड़ा अधिक दिलचस्प है। खैर, एक तालिका एक संदर्भ वस्तु (अधिक या कम) है, इसलिए आप शायद कहीं भी सबसे नीचे तालिका संदर्भ को सहेजने के लिए सुरक्षित रहेंगे।
चूंकि लुआ एपीआई टेबल रेफरी में सीधे हस्तक्षेप करने के लिए प्रतीत नहीं होता है, इसलिए आपको शायद एक वैश्विक में रेफरी को धक्का देना होगा, या यदि यह एक टेबल प्रविष्टि के साथ एक नई तालिका नहीं काम करता है। जब आप बाद में रेफरी चाहते हैं, तो इसे वैश्विक से प्राप्त करें।
उदा।
// Final table reference is now at top of stack, after multiple dereferences
lua_setglobal(L, "mytableref");
मुझे पहले से ही यह पता है कि यह कैसे करना है :) मैं टेबल में गहराई से घोंसला वाला एक फ़ंक्शन संदर्भित करना चाहता हूं ताकि मैं बाद में उन सभी तालिकाओं को घुमाने के बिना फ़ंक्शन को कॉल कर सकूं। – jameszhao00
[उत्तर में जोड़ा गया] –