LUA脚本的几个疑问?

如何用dostring来运行lua文件
用dostring来运行一个有返回值的函数,如何获取返回值
听说lua执行函数是单线程,而且执行一个带参的函数需要自己清理堆栈
为什么绑定的c++函数,只能接收一个参数,而且必须是一个int返回值.如:int Show_Msg(LuaState* state)

关于dofile:
对于dofile是不是读取一个文件的所有指令,然后每条都会去执行dotring.
如果不是,用两个线程,调用同样的带返回值的函数.
一个是调用dostring
一个dofilre调用文件(文件内也是同样的指令)
那么长时间执行后,两方数据是否会被破坏?

还有两点忘了写
lua默认为全局变量
那么 形参和返回值是临时的还是全局的呢?
funciton Msg(x,y)
a=x+y
return a
end
其中的 x,y,a是全局的还是临时的

哆啦的时光机
浏览 753回答 1
1回答

犯罪嫌疑人X

a = dostring.....dostring最后一个返回值,就是准备给a的。c++绑定函数返回时,它只能且必须返回一个值,这个值通知Lua,我返回了几个值在堆栈里。你不返回这个值的话,难道让Lua去猜你会返回几个值?你这里设了返回值个数后,Lua才会给你分配保留适当的空间,不然你返回后,之前放的返回值就丢了。dofile和dostring一样,会先获取源文件或字符串内容,然后编译,再逐条执行代码。你说的多线程,我不明白你的意思,就不说了。最后那个x和y当然是临时的,而那个a,是全局的了。Lua5.2和之前的版本不一样了,“全局”不是真正的全局,而是当前环境的全局,仔细去看看Lua5.2的官方文档。
打开App,查看更多内容
随时随地看视频慕课网APP