client = client
в объявлении capi
Это определяет, какая часть capi доступна в области действия этого файла, если вы посмотрите наВ файле client.lua вы увидите, что в определенном в нем capi
есть client, mouse, screen и awesome.
Для каждого элемента, определенного в таблице capi
, существует соответствующий файл .c.Эти файлы определяют объекты, такие как client
.urgent.lua
имеет видимость этого объекта, вероятно, это глобальная переменная, поэтому мы можем установить client = client
второй клиент ссылается на глобальную переменную.
Вот пример 2 файлов:
main.lua
bar = "Hello World!"
local foo = require('foo')
print(foo.bar)
foo.lua
local foo = {
bar = bar
}
return foo
Функция печати в main.lua приведет к Hello World!
setmetatable
вещи внутри do-end
Здесь, деформируя setmetatable
в блоке do-end, код выполняется в ограниченной области.Обычно это делается для того, чтобы содержать локальные переменные блока, чтобы они не сохранялись после выполнения кода.
Тем не менее, это не цель этого блока, так как блок не имеет локальных переменных.На мой взгляд, блокировка просто показывает, что изменяемый объект является локальной переменной клиента и не глобальной переменной клиента.
Кроме того, здесь используются метатаблицы для предотвращения циклических циклов зависимости, это упоминается в комментариях в некоторых местах, где похожий код появляется в проекте, например, client.lua
, где определено local screen
.