Rumah >pembangunan bahagian belakang >Golang >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.
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
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!