LUA脚本的几个疑问
如何用dostring来运行lua文件用dostring来运行一个有返回值的函数,如何获取返回值听说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是全局的还是临时的 展开
用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是全局的还是临时的 展开
3个回答
展开全部
关于dostring中的局部变量 这里刚好是有个特殊情况的
我用的luaforwindows直接运行的 没dostring 就先用loadstring了
local a = 1
print(loadstring("a = 123")())
print(a,_G.a)
这里a = 123执行时 不会给局部变量a进行赋值操作,而是修改了全局变量a
对于到底是局部变量还是全局变量的判断 依据的是 使用这个变量的这个区域 在使用之前 是否有过局部变量的声明
比如
a = 1
print(a)
local a = 2
print(a,_G.a)
这样就能看到2个不同的a
而在function Msg(x,y)中
是因为x和y是被当作实参传过来的 函数里的实参 在函数内部都是作为局部变量来使用 所以xy是局部而a是全局
展开全部
a = dostring.....
dostring最后一个返回值,就是准备给a的。
c++绑定函数返回时,它只能且必须返回一个值,这个值通知Lua,我返回了几个值在堆栈里。你不返回这个值的话,难道让Lua去猜你会返回几个值?你这里设了返回值个数后,Lua才会给你分配保留适当的空间,不然你返回后,之前放的返回值就丢了。
dofile和dostring一样,会先获取源文件或字符串内容,然后编译,再逐条执行代码。
你说的多线程,我不明白你的意思,就不说了。
最后那个x和y当然是临时的,而那个a,是全局的了。
Lua5.2和之前的版本不一样了,“全局”不是真正的全局,而是当前环境的全局,仔细去看看Lua5.2的官方文档。
dostring最后一个返回值,就是准备给a的。
c++绑定函数返回时,它只能且必须返回一个值,这个值通知Lua,我返回了几个值在堆栈里。你不返回这个值的话,难道让Lua去猜你会返回几个值?你这里设了返回值个数后,Lua才会给你分配保留适当的空间,不然你返回后,之前放的返回值就丢了。
dofile和dostring一样,会先获取源文件或字符串内容,然后编译,再逐条执行代码。
你说的多线程,我不明白你的意思,就不说了。
最后那个x和y当然是临时的,而那个a,是全局的了。
Lua5.2和之前的版本不一样了,“全局”不是真正的全局,而是当前环境的全局,仔细去看看Lua5.2的官方文档。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
x,y,a是临时的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询