gopher-lua icon indicating copy to clipboard operation
gopher-lua copied to clipboard

args in lua functions nil

Open raynorchen opened this issue 1 year ago • 2 comments

  1. What version of GopherLua are you using? : v1.1.1
  2. What version of Go are you using? : 1.22.3
  3. What operating system and processor architecture are you using? : mac-M1
  4. What did you do? :

test.lua:

root = {}

function root:testfunc(a)
    if a == nil then
        return "nil"
    end
    return a
end

main.go

lua.NewState()
	defer L.Close()

	if err := L.DoFile("test.lua"}

	myTable := L.GetGlobal("root").(*lua.LTable)

	err := L.CallByParam(lua.P{
		Fn:      myTable.RawGet(lua.LString("testfunc")),
		NRet:    1,
		Protect: true,
	}, lua.LString("hello"))

	if err != nil {
		panic(err)
	}
	ret := L.Get(-1)
	L.Pop(1)
	res, ok := ret.(lua.LString)
	if ok {
		fmt.Println(res)
	}
  1. What did you expect to see? :"hello"
  2. What did you see instead? : "nil"

raynorchen avatar Dec 19 '24 10:12 raynorchen

fixed

raynorchen avatar Dec 19 '24 11:12 raynorchen

This issue looks to be caused by you not passing a self parameter in your CallByParam invocation. I think if you were to do:

err := L.CallByParam(lua.P{
	Fn:      myTable.RawGet(lua.LString("testfunc")),
	NRet:    1,
	Protect: true,
}, myTable, lua.LString("hello"))

It would work as expected.

If you agree, please consider closing the issue.

tul avatar Jan 10 '25 11:01 tul