


Bagaimanakah cara saya menggunakan gopher-lua untuk mentakrifkan fungsi Lua yang mengambil jadual pratakrif sebagai parameter dan skrip Lua boleh mengakses dalam fungsi itu?
Editor php Xiaoxin akan memperkenalkan kepada anda cara menggunakan gopher-lua untuk mentakrifkan fungsi dengan parameter jadual yang dipratentukan dalam fungsi Lua, dan mengakses jadual di dalam fungsi tersebut. gopher-lua ialah penterjemah Lua yang dilaksanakan dalam bahasa Go, yang boleh membenamkan dan melaksanakan skrip Lua dalam program Go. Melalui reka bentuk dan penggunaan kod yang munasabah, kami boleh mencapai matlamat ini dengan mudah. Seterusnya, kami akan menerangkan secara terperinci cara melakukan ini.
Kandungan soalan
Saya tahu cara mentakrifkan fungsi Go dan menjadikannya global (Contoh dua kali dalam dokumentasi). Tetapi bagaimana jika parameter fungsi ini mestilah jadual yang telah ditetapkan?
function calling_this_function_would_be_required(predefined_table) print(predefined_table["something"]) end
Pelayan IMAP Dovecot menyediakan sesuatu seperti di atas: https://doc.dovecot.org/configuration_manual/authentication/lua_based_authentication/#examples
Saya juga ingin menyediakan fungsi yang telah ditetapkan dengan jadual (atau bahkan data pengguna). Tetapi saya tidak tahu bagaimana untuk mencapai ini.
Membuat jadual global adalah mudah (L.SetGlobal(...)), tetapi bagaimana anda menambahkannya pada fungsi yang diharapkan?
Tambah beberapa fungsi dalam Go
func CallMe(L *lua.LState) { // How do I add a table as argument?? } func Foo() { L := NewState() defer L.Close() t := L.NewTable() t.RawSetString("example", lua.LString("some_value")) // I do not want a global table. I would like an expected Lua function that has _this_ table as argument L.SetGlobal("predefined_table", t) // Not even sure with his... L.SetGlobal("calling_this_function_is_required", L.NewFunction©llMe)) }
Alangkah baiknya jika seseorang boleh memberi saya sedikit inspirasi :-) Terima kasih terlebih dahulu
Penyelesaian
Berdasarkan jawapan @koyaanisqatsi, saya mengetahui cara untuk menjadikannya berfungsi dalam Go.
Go contoh kod:
<code>package main import ( "fmt" "github.com/yuin/gopher-lua" ) type Person struct { Name string GivenName string Street string PostalCode string City string } func main() { p := &Person{ Name: "Mustermann", GivenName: "Max", Street: "Sackgasse 19", PostalCode: "36304", City: "Alsfeld", } L := lua.NewState() defer L.Close() if err := L.DoFile("sample.lua"); err != nil { panic(err) } t := L.NewTable() t.RawSetString("name", lua.LString(p.Name)) t.RawSetString("given_name", lua.LString(p.GivenName)) t.RawSetString("street", lua.LString(p.Street)) t.RawSetString("postal_code", lua.LString(p.PostalCode)) t.RawSetString("city", lua.LString(p.City)) if err := L.CallByParam(lua.P{ Fn: L.GetGlobal("call_me"), NRet: 1, Protect: true, }, t); err != nil { panic(err) } ret := L.Get(-1) // returned value L.Pop(1) // remove received value fmt.Println("The result of the Lua function is:", ret) } </code>
fail sampel.lua:
<code>function call_me(tbl) print(tbl.name) print(tbl.given_name) print(tbl.street) print(tbl.postal_code) print(tbl.city) return 0 end </code>
Hasil:
Mustermann Max Sackgasse 19 36304 Alsfeld The result of the Lua function is: 0
Atas ialah kandungan terperinci Bagaimanakah cara saya menggunakan gopher-lua untuk mentakrifkan fungsi Lua yang mengambil jadual pratakrif sebagai parameter dan skrip Lua boleh mengakses dalam fungsi itu?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Perpustakaan yang digunakan untuk operasi nombor terapung dalam bahasa Go memperkenalkan cara memastikan ketepatannya ...

Masalah Threading Giliran di GO Crawler Colly meneroka masalah menggunakan Perpustakaan Colly Crawler dalam bahasa Go, pemaju sering menghadapi masalah dengan benang dan permintaan beratur. � ...

Perpustakaan mana yang dibangunkan oleh syarikat besar atau projek sumber terbuka yang terkenal? Semasa pengaturcaraan di GO, pemaju sering menghadapi beberapa keperluan biasa, ...

Dua cara untuk menentukan struktur dalam bahasa Go: perbezaan antara VAR dan jenis kata kunci. Apabila menentukan struktur, pergi bahasa sering melihat dua cara menulis yang berbeza: pertama ...

Perbezaan antara percetakan rentetan dalam bahasa Go: perbezaan kesan menggunakan fungsi println dan rentetan () sedang ...

Apa yang perlu saya lakukan jika label struktur tersuai di Goland tidak dipaparkan? Apabila menggunakan Goland untuk Pembangunan Bahasa GO, banyak pemaju akan menghadapi tag struktur tersuai ...

Masalah menggunakan redisstream untuk melaksanakan beratur mesej dalam bahasa Go menggunakan bahasa Go dan redis ...

GO Pointer Syntax dan menangani masalah dalam penggunaan perpustakaan Viper semasa pengaturcaraan dalam bahasa Go, adalah penting untuk memahami sintaks dan penggunaan petunjuk, terutama dalam ...
