मेरे पास एक प्रोग्राम है जो लुआ को एम्बेड करता है और आलसी फ़ंक्शन लुकअप का एक रूप लागू करता है।लुआ 5.2 LUA_GLOBALSINDEX वैकल्पिक
जिस तरह से यह लुआ 5.1 में काम करता था, जब भी एक प्रतीक को अपरिभाषित किया गया था तो दुभाषिया एक वैश्विक फ़ंक्शन हुक को कॉल करेगा जो तब प्रतीक को हल करेगा।
int function_hook(lua_State *pLuaState)
{
// do the function lookup here
....
return 1;
}
......
//-- create table containing the hook details
lua_newtable(pLuaState);
lua_pushstring(pLuaState, "__index");
lua_pushcfunction(pLuaState, function_hook);
lua_settable(pLuaState, -3);
//-- set global index callback hook
lua_setmetatable(pLuaState, LUA_GLOBALSINDEX);
मैं अब लुआ 5.2 के लिए इस कोड को स्थानांतरित करने के कोशिश कर रहा हूँ और किसी समस्या का सामना किया है:
यह है कि इस आलसी समारोह देखने कार्यान्वित सी कोड का एक छोटा सा हिस्सा है।
लुआ 5.2 में LUA_GLOBALSINDEX मान अब परिभाषित नहीं किया गया है, इसलिए कोड की यह पंक्ति अब संकलित नहीं होती है।
//-- set global call back hook
lua_setmetatable(pLuaState, LUA_GLOBALSINDEX);
LUA_GLOBALSINDEX के लिए यह परिवर्तन करने के लिए एक reference नहीं है लेकिन दुर्भाग्य से यह नहीं मदद की है।
जब भी यह एक अनसुलझे प्रतीक पाता है तो दुभाषिया को function_hook को कॉल करने के लिए कोड की एक पंक्ति को दोबारा लिखने का सबसे अच्छा तरीका क्या होगा?
तुम भी उपयोग कर सकते हैं 'lua_pushglobaltable (pLuaState)' 'बजाय lua_rawgeti की (pLuaState, LUA_RIDX_GLOBALS, LUA_REGISTRYINDEX)' अपने कोड भविष्य में परिवर्तन से बचाने के लिए। आप lua 5.1 के लिए 'lua_pushglobaltable' को' lua_pushvalue (एल, LUA_GLOBALSINDEX) 'के रूप में भी परिभाषित कर सकते हैं। – lhf
+1 यह समाधान पूरी तरह से काम करता है। बहुत बहुत धन्यवाद। – jussij