C İşlevlerini Lua'ya Kaydetme
luaL_register ve lua_pushcfunction kullanarak C işlevlerini Lua betiklerine açın.
C İşlevlerini Lua'ya Kaydetme, CoddyKit'te ücretsiz bir Lua Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Lua Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Lua Academy kursu toplamda 4 dersten oluşur.
Genel Bakış
C işlevleri Lua betiklerine açılabilir. Bu işlevlerin int myFunc(lua_State *L) imzasına sahip olması gerekir. Bağımsız değişkenleri yığından okur ve dönüş değerlerini yığına iterler.
C İşlevi İmzası
Lua'dan çağrılabilen her işlev bir lua_CFunction'dır: bir lua_State* alır, bağımsız değişkenleri okur, sonuçları iter ve sonuç sayısını döndürür.
// C code
static int l_add(lua_State *L) {
double a = luaL_checknumber(L, 1);
double b = luaL_checknumber(L, 2);
lua_pushnumber(L, a + b);
return 1; // one result
}Genel İşlev Olarak Kaydetme
lua_pushcfunction(L, l_add) C işlevini yığına iter, ardından lua_setglobal(L, "add") bu işlevi Lua'da genel olarak kaydeder.
// C code
lua_pushcfunction(L, l_add);
lua_setglobal(L, "add");
// Now Lua can call: add(3, 4)luaL_newlib / luaL_register
Bir luaL_Reg dizisi ve luaL_newlib kullanarak bir C işlevleri grubunu Lua modülü olarak kaydedin.
// C code
static const luaL_Reg mylib[] = {
{"add", l_add},
{"mul", l_mul},
{NULL, NULL}
};
luaL_newlib(L, mylib);
lua_setglobal(L, "mylib");
// Lua: mylib.add(1, 2)Bağımsız Değişkenleri Okuma
luaL_checknumber(L, n), luaL_checkstring(L, n) vb. bağımsız değişkenleri okur ve doğrular; tür yanlışsa Lua hatası oluşturur.
Birden Çok Değer Döndürme
Birden çok değeri itin ve sayılarını döndürün. Lua bunları birden çok dönüş değeri olarak atar.
// C code
static int l_divmod(lua_State *L) {
int a = luaL_checkinteger(L, 1);
int b = luaL_checkinteger(L, 2);
lua_pushinteger(L, a / b);
lua_pushinteger(L, a % b);
return 2; // two results
}C Kapanışları için Üst Değerler
C kapanışları, kayıt sırasında lua_pushcclosure(L, fn, n) kullanarak üst değerleri yakalar. Üst değerlere lua_upvalueindex(n) ile erişin.
C'den Hata Bildirme
Bir C işlevinden Lua hatası oluşturmak için luaL_error(L, format, ...) çağrısını yapın. Bu işlev hiçbir zaman dönmez; korumalı çağrı işleyicisine longjmp yapar.
// C code
if (divisor == 0)
luaL_error(L, "division by zero at argument %d", 2);C Modülü .so/.dll Olarak
Bir C modülü luaopen_modname işlevini dışa açar. Lua'nın require işlevi paylaşılan kitaplığı yükler ve modülü başlatmak için bu işlevi çağırır.
// C code (shared library entry point)
int luaopen_mymod(lua_State *L) {
luaL_newlib(L, mymod_funcs);
return 1;
}Bağımsız Değişken Sayısı Denetimi
Geçirilen bağımsız değişkenlerin sayısını denetlemek için lua_gettop(L) kullanın. luaL_checkany(L, n) en az n bağımsız değişken sağlandığından emin olur.
LuaJIT FFI Seçeneği
LuaJIT'nin FFI özelliği, C sarmalayıcı kodu yazmadan C işlevlerini doğrudan Lua'dan çağırmanızı sağlar. Salt işlev çağrıları için çoğu zaman daha basittir. Daha derin tümleştirme için C API'si gerekir.
C İşlevi Sorusu
Lua'dan çağrılabilen bir C işlevi ne döndürmelidir?
Özet: C İşlevlerini Kaydetme
Lua'dan çağrılabilen C işlevlerinin imzası int f(lua_State*) biçimindedir. Bağımsız değişkenleri luaL_check* ile okuyun, sonuçları itin ve sayıyı döndürün. İşlevleri tek tek lua_pushcfunction ile veya toplu olarak luaL_newlib ile kaydedin.
Sıkça Sorulan Sorular
“C İşlevlerini Lua'ya Kaydetme” dersi ücretsiz mi?
Evet — “C İşlevlerini Lua'ya Kaydetme” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Lua Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Lua Academy kursu toplamda 4 dersten oluşur.
“C İşlevlerini Lua'ya Kaydetme” dersinde ne öğreneceğim?
luaL_register ve lua_pushcfunction kullanarak C işlevlerini Lua betiklerine açın. Lua Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Lua Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Lua Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“C İşlevlerini Lua'ya Kaydetme” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Lua Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Lua Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Lua C API Yığın Modeli
- C'den Lua İşlevlerini Çağırma
- C İşlevlerini Lua'ya Kaydetme
- Durum ve Hata İşleme