Function Lua中的奇怪构造

Function Lua中的奇怪构造,function,lua,anonymous-function,Function,Lua,Anonymous Function,我正在学习Lua,遇到了以下结构: button.action = function() buttonPressed() end 和你的一样吗 button.action = buttonPressed() end ? 我知道button.action被分配了一个由buttonPressed()返回的值,但是为什么要将它包装成这样的匿名函数呢?Lua本身没有私有/受保护变量的概念。不同的程序员使用不同的方法来模拟相同的结果 至于你对这个结构的解释;存在不匹配的end语句。即使忽略该语法错误,

我正在学习Lua,遇到了以下结构:

button.action = function() buttonPressed() end
和你的一样吗

button.action = buttonPressed() end
?


我知道button.action被分配了一个由buttonPressed()返回的值,但是为什么要将它包装成这样的匿名函数呢?

Lua本身没有私有/受保护变量的概念。不同的程序员使用不同的方法来模拟相同的结果

至于你对这个结构的解释;存在不匹配的
end
语句。即使忽略该语法错误,
button.action
的值也不会是
buttonPressed
函数返回的值。向您展示:

x = function() return 'hi' end
y = function() x() end
z = x()
print( y, z, y(), 1 )
如您所见,这很可能是程序员合并“受保护”函数或类的方式(在我看来)。

这:

button.action = function() buttonPressed() end
与此(几乎)相同:

button.action = buttonPressed
但请注意末尾没有括号

正如@hjpotter92所说,主要的区别在于
buttonPressed
可以返回一些东西,而
button.action
不能。

“我知道button.action被分配了一个buttonPressed()返回的值,但是为什么要将其包装成这样的匿名函数呢?”

你搞错了。声明:

button.action = function() buttonPressed() end
分配给
按钮。操作
一个匿名函数,调用该函数时,该函数将依次执行调用
按钮按下()
。请注意,匿名函数不返回任何内容,因此仅因其副作用而调用它。这是一个常见的回调习惯用法。您可以使用匿名函数延迟某段代码的执行(在本例中,仅调用
按钮pressed
),直到需要执行为止


给定代码段的名称,我猜这段代码设置了当按下某个按钮时要执行的操作。当按下按钮时,操作被触发(在代码内部的某个地方会有一个类似于
button.action()
的调用,调用存储在
button.action
中的匿名函数),然后执行调用
buttonPressed()

您的第二个代码片段看起来不正确或不完整。有一个
结束
用于关闭块作用域,但没有任何东西启动它。你确定这是完整的密码吗?你说得对,谢谢。现在我明白了它是怎么错的,为什么错了。我在没有意识到在这种情况下“结束”必须被删除的情况下,对一个剪掉的工作进行了更改。前者将取决于按钮按下后的值的未来变化,后者将不取决于。谢谢,这是有意义的(我认为)。我仍然需要仔细思考和试验,以更好地掌握它。感谢您的演示,它帮助清理了很多东西。我相信在本例中,目标是拥有一个通用的button类,并且能够指定在创建按钮实例时按钮执行的操作。因此,该构造在类代码之外用于将所需操作存储在类属性之一中,而不是在类内部定义要执行的操作,从而失去灵活性。