如何在Corona中通过引用传递变量
2013-10-17 13:33:55
收藏:0
阅读:120
评论:4
我正在使用Corona SDK。 我想编写一个函数,它以组件作为参数,并像这样将其删除:
function removeComponent(component)
if component then component:removeSelf() end
component = nil
end
好吧,它可以工作,但是在使用这个函数后,我的参数没有变成nil。可能我必须通过引用传递它,但我不确定在Corona中是否可能。
点赞
用户2633831
其实跟其他语言没什么不同。比如在 C++ 中,按引用传递一个值并不会阻止程序在其他地方持有该值的另一个副本。
我对 Corona 一无所知,但这实际上不是一个关于 Corona 的问题,更多地是一个 Lua 风格的问题。然而,如果我写了这个程序,我会确保 'component' userdata 或其基础值会自动清除。如果再次访问该 userdata,应该会抛出一个错误,指出重新使用了已死亡的 userdata。
2013-10-17 14:27:26
用户2893203
我写了这段代码:
local component = display.newCircle(100, 100, 100);
local function removeComponent(c)
if component then component:removeSelf() end
component = nil
end
removeComponent(component)
if component == nil then print("Component is nil") else print("Component is not nil") end
输出结果是"Component is nil"。也许你把组件的副本保存在其他地方了,或者你忘记调用removeComponent函数或者其他错误。需要看更多你的代码。
2013-10-18 10:58:07
用户375980
Lua不支持传递引用,但由于它支持返回值,因此您始终可以使用这种惯用方法来实现您想要的操作:
function removeComponent(component)
if component then component:removeSelf() end
return nil
end
然后像这样调用它:
a = removeComponent(a)
编辑:值得指出的是,由于Lua支持多个返回值和多个赋值,您实际上永远不需要传递引用。如果需要更新多个项,请将它们传递并返回它们,然后进行调用如 a,b = myFunction(a,b).
2014-03-15 15:03:38
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
这个示例中所呈现的并不是很有意义。
你到底想要做什么?组件是全局的吗?还是表中的键?
在你的示例中,组件是一个函数中的本地变量。
component = nil只会将该变量中的值删除,因此会丢失它。如果你想产生全局效果,你需要将想要消除的变量名称作为字符串传递进函数:
function removeComponent(component) if _G[component] then -- 在全局中存在? _G[component]:removeSelf() end _G[component] = nil end需要注意的是,这种编程方式(使用全局表来进行此类操作)通常不是一个好的方法。在最好的情况下,它可能会让你感到惊讶;在最坏的情况下,你会像消除 print 等标准函数一样.
因此,我建议将事物放在自己的表中,并将其传递给函数。