首页 > 解决方案 > 为什么我使用 'end)' 而不是 end |?

问题描述

    draw.RoundedBox(0,0,0,100,100,Color(120,255,120))
end)

我正在观看学习 Lua 的教程,更具体地说是用于 Garry's Mod 引擎的 Lua。在教程中,我注意到只使用“end”不起作用。我不得不使用'end)'和')'。

为什么我必须在此代码的末尾放置一个“)”?

标签: lua

解决方案


一些函数将其他函数作为参数。

当你看到一个这样调用的函数时: hello(param, function(a) print(a) end)

(对不起,糟糕的例子。这个函数并没有真正做任何事情)内部的函数是从函数的源代码内部调用的hello

end是内部函数的)结尾, 是第一个函数的参数列表的结尾。


所以这里我们hook.Add()调用了一个函数:

hook.Add("HUDPaint", "DrawMyHud", function()
     draw.RoundedBox(0,0,0,100,100,Color(120,255,120))
end)

并来自GMOD wiki

hook.Add( string eventName, any identifier, function func )
--Add a hook to be called upon the given event occurring.

虽然我们正在调用一个函数,但该函数所做的是在代码中创建一个称为钩子的特殊连接。在事件“HUDPaint”上,GMOD 客户端将调用提供的函数。

编写此函数的另一种可能使含义end)更清楚的方法是将每个参数设为自己的行:

hook.Add(
     "HUDPaint", 
     "DrawMyHud", 
      function() draw.RoundedBox(0,0,0,100,100,Color(120,255,120)) end --end of function declaration
) --end of hook.Add function call

推荐阅读