gopher-lua
lua_call
golang和lua交互的方式与c++和lua交互的方式一样,都是通过一个栈,详细请看这里:https://blog.csdn.net/u012278016/article/details/79471738
Call函数介绍
func (ls *LState) Call(nargs, nret int)
nargsnret
使用方法
在使用之前需要先将lua中的函数压入栈,之后再将需要的参数压入,就可以调用call函数。
Lua代码:
function say( ... )
-- body
print("This is line.")
end
function add( index1, index2 )
-- body
ret1 = index1 + index2
re2 = inedex1 - index2
return re1, re2
end
Go代码:
package main
import (
"fmt"
"reflect"
)
import (
"github.com/yuin/gopher-lua"
)
func main() {
L := lua.NewState()
L.DoFile("mylua.lua")
f := L.GetGlobal("say")
L.Push(f)
L.Call(0,0)
value := L.GetTop()
fmt.Println(L.Get(value)) //因为say函数没有返回值,所以这里是nil
f = L.GetGlobal("add") //这里函数有输入值,需要先将函数压入栈,再压入参数
L.Push(f)
L.Push(lua.LNumber(2))
L.Push(lua.LNumber(2))
L.Call(2,2)。
/*参数的返回值会依次压入栈,ret1先压入
ret2后压入,所以执行后栈顶的是ret2,接下来的才是ret1*/
value = L.GetTop()
fmt.Println(L.Get(value)) // ret2:0
L.Pop(1)
value = L.GetTop()
fmt.Println(L.Get(value)) //re1:4
}
结果:
This is line.
nil
0
4