से एक lua फ़ंक्शन कॉलबैक करने के लिए मैं एक सी समारोह (ए) test_callback
एक समारोह (बी) पैरामीटर और एक "के लिए कॉलबैक" होगा बीकैसे एसी समारोह
//typedef int(*data_callback_t)(int i);
int test_callback(data_callback_t f)
{
f(3);
}
int datacallback(int a)
{
printf("called back %d\n",a);
return 0;
}
//example
test_callback(datacallback); // print : called back 3
के रूप में करने के लिए एक सूचक को स्वीकार अब है, मैं test_callback
को लपेटना चाहता हूं ताकि उन्हें लुआ से बुलाया जा सके, मान लीजिए कि नाम lua_test_callback
है, और इसके लिए इनपुट पैरामीटर भी लुआ फ़ंक्शन होगा। मुझे इस लक्ष्य को कैसे प्राप्त करना चाहिए?
function lua_datacallback (a)
print "hey , this is callback in lua" ..a
end
lua_test_callback(lua_datacallback) //expect to get "hey this is callback in lua 3 "
संपादित करें:
This link बाद में उपयोग के लिए कॉलबैक फ़ंक्शन स्टोर करने के लिए एक तरह से प्रदान करते हैं।
//save function for later use
callback_function = luaL_ref(L,LUA_REGISTRYINDEX);
//retrive function and call it
lua_rawgeti(L,LUA_REGISTRYINDEX,callback_function);
//push the parameters and call it
lua_pushnumber(L, 5); // push first argument to the function
lua_pcall(L, 1, 0, 0); // call a function with one argument and no return values
यह lua_pcall जो सिर्फ दुर्घटनाग्रस्त बजाय ढेर पर एक त्रुटि आ जाएगी उपयोग करने के लिए बेहतर है। –
अच्छा सही उदाहरण। लेकिन व्यावहारिक रूप से ऐसे lua_test_callback() फ़ंक्शंस को बार-बार लिखने के बावजूद, सामान्य, अच्छी तरह से परीक्षण किए गए इंटरफ़ेस का उपयोग करना बेहतर होता है। –