Lua中的奇怪结构
2013-9-2 7:35:13
收藏:0
阅读:91
评论:3
我正在学习 Lua,遇到了以下结构:
button.action = function() buttonPressed() end
它和以下代码是一样的吗?
button.action = buttonPressed() end
?
我知道 button.action 被分配了 buttonPressed() 的返回值,但为什么要这样包装成匿名函数?
点赞
用户204011
下面是翻译:
这个:
button.action = function() buttonPressed() end
和这个几乎是一样的:
button.action = buttonPressed
但是请注意,结尾没有括号。
正如 @hjpotter92 所说,两者的主要区别在于 buttonPressed 可能会返回一些内容,而 button.action 不会返回任何内容。
2013-09-02 12:24:18
用户2633423
我知道 button.action 赋值了 buttonPressed() 的返回值,但为什么要这样包装为匿名函数呢?
你误解了。下面这条语句:
button.action = function() buttonPressed() end
给 button.action 赋值了一个匿名函数,当被调用时,它会进一步调用 buttonPressed()。注意,这个匿名函数并没有返回任何东西,所以它仅仅被调用是为了产生副作用。这是回调函数的常用习惯。你可以使用匿名函数来延迟一些代码段的执行(在这种情况下只是调用 buttonPressed()),直到你需要去执行它。
鉴于你片段中的名称,我猜测这段代码是设置某个按键被按下时执行的操作。当该按键被按下时,那么操作就会被触发(在代码的某个深处会有一个类似于 button.action() 的调用,它调用了存储在 button.action 中的匿名函数),并执行 buttonPressed()。
2013-09-02 16:57:36
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的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中获取用户配置主目录的跨平台方法
Lua本身没有私有/受保护变量的概念。不同的程序员使用不同的方法模拟相同的结果。
至于你对这个结构的解释,存在不匹配的**
end**语句。即使忽略了这个语法错误,button.action的值也不会是buttonPressed函数返回的值。这里有一个小演示来展示:x = function() return 'hi' end y = function() x() end z = x() print( y, z, y(), 1 )如你所见,这很可能是程序员融合“受保护”函数或类的方式(就我个人而言)。