为什么在 Lua 代码中我使用 'end)' 而不是只用 end ?

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

我正在学习 Garry's Mod 引擎的 Lua 编程,我发现在教程中,如果只使用 'end' 是无法通过的,必须使用 'end)' 来代替。

为什么这段代码中的 end 后面必须加一个 ')' ?

点赞
用户12514997
用户12514997

有些函数会将其他函数作为参数。

当你看到像这样调用函数: 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
2020-04-27 01:03:28