Lua中的奇怪结构

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

button.action = function() buttonPressed() end

它和以下代码是一样的吗?

button.action = buttonPressed() end

?

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

点赞
用户1190388
用户1190388

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

至于你对这个结构的解释,存在不匹配的**end**语句。即使忽略了这个语法错误,button.action的值也不会是buttonPressed函数返回的值。这里有一个小演示来展示:

x = function() return 'hi' end
y = function() x() end
z = x()
print( y, z, y(), 1 )

如你所见,这很可能是程序员融合“受保护”函数或类的方式(就我个人而言)。

2013-09-02 11:48:44
用户204011
用户204011

下面是翻译:

这个:

button.action = function() buttonPressed() end

和这个几乎是一样的:

button.action = buttonPressed

但是请注意,结尾没有括号。

正如 @hjpotter92 所说,两者的主要区别在于 buttonPressed 可能会返回一些内容,而 button.action 不会返回任何内容。

2013-09-02 12:24:18
用户2633423
用户2633423

我知道 button.action 赋值了 buttonPressed() 的返回值,但为什么要这样包装为匿名函数呢?

你误解了。下面这条语句:

button.action = function() buttonPressed() end

button.action 赋值了一个匿名函数,当被调用时,它会进一步调用 buttonPressed()。注意,这个匿名函数并没有返回任何东西,所以它仅仅被调用是为了产生副作用。这是回调函数的常用习惯。你可以使用匿名函数来延迟一些代码段的执行(在这种情况下只是调用 buttonPressed()),直到你需要去执行它。

鉴于你片段中的名称,我猜测这段代码是设置某个按键被按下时执行的操作。当该按键被按下时,那么操作就会被触发(在代码的某个深处会有一个类似于 button.action() 的调用,它调用了存储在 button.action 中的匿名函数),并执行 buttonPressed()

2013-09-02 16:57:36