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是全局的还是临时的
展开
 我来答
yaoyue1019
2014-02-10 · 知道合伙人互联网行家
yaoyue1019
知道合伙人互联网行家
采纳数:804 获赞数:3392
擅长lua脚本 与android前端交互设计

向TA提问 私信TA
展开全部

关于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是全局

百度网友2b4fd6b94
2014-02-10 · TA获得超过109个赞
知道小有建树答主
回答量:88
采纳率:0%
帮助的人:99.2万
展开全部
a = dostring.....

dostring最后一个返回值,就是准备给a的。
c++绑定函数返回时,它只能且必须返回一个值,这个值通知Lua,我返回了几个值在堆栈里。你不返回这个值的话,难道让Lua去猜你会返回几个值?你这里设了返回值个数后,Lua才会给你分配保留适当的空间,不然你返回后,之前放的返回值就丢了。

dofile和dostring一样,会先获取源文件或字符串内容,然后编译,再逐条执行代码。
你说的多线程,我不明白你的意思,就不说了。

最后那个x和y当然是临时的,而那个a,是全局的了。

Lua5.2和之前的版本不一样了,“全局”不是真正的全局,而是当前环境的全局,仔细去看看Lua5.2的官方文档。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
biznow
2014-02-09 · TA获得超过1683个赞
知道小有建树答主
回答量:1138
采纳率:0%
帮助的人:796万
展开全部
x,y,a是临时的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式