gpt4 book ai didi

lua - 这段来自 awesome wm 的 lua 代码是做什么的?

转载 作者:行者123 更新时间:2023-12-02 14:53:59 25 4
gpt4 key购买 nike

看看这段代码:

local urgent = {}

local capi =
{
client = client,
}

local client
do
client = setmetatable({}, {
__index = function(_, k)
client = require("awful.client")
return client[k]
end,
__newindex = error -- Just to be sure in case anything ever does this
})
end

我无法理解它的作用。它来自 awesome-wm 项目。这些是我难以理解的事情:

  1. client = clientcapi
  2. 的声明中
  3. setmetatable 里面的东西 do-end

最佳答案

  1. client = client in the declaration of capi

这定义了 capi 的哪一部分在此文件的范围内可用,如果您查看 client.lua 文件,您会看到其中定义的 capi 具有客户端、鼠标、屏幕、很棒。

对于 capi 表中定义的每个项目,都有一个对应的 .c 文件。这些文件定义了诸如 client 之类的对象。 urgent.lua 具有该对象的可见性,可能它是一个全局变量,这就是我们如何设置 client = client 第二个客户端引用全局变量。

这是 2 个文件的示例:

主.lua

bar = "Hello World!"

local foo = require('foo')

print(foo.bar)

foo.lua

local foo = {
bar = bar
}
return foo

main.lua 中的打印函数将产生 Hello World!

  1. setmetatable stuff inside do-end

这里通过在 do-end block 中扭曲 setmetatable 代码在受限范围内执行。通常这样做是为了包含 block 的局部变量,以便它们在代码执行后不会持续存在。

那不是这个 block 的目的,因为这个 block 没有局部变量。如我所见,阻塞只是为了表明被修改的对象是客户端的局部变量不是全局变量客户端的变量

另外这里的metatable是用来防止依赖循环的,这个在项目中一些类似代码出现的地方的注释里有提到,比如client.lua里面的local screen 已定义。

关于lua - 这段来自 awesome wm 的 lua 代码是做什么的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53933064/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com