Продолжить позволю себе. Луа принимает спокойно сокращённые версии масок: `"*a"`, например. Окроме этого есть ещё и фича Lua 5.3: звёздочку можно не писать. В 5.2 работать не будет, разумеется.
Помимо этого, слишком часто ты юзаешь `component.proxy`. Каждый вызов создаётся совершенно новая таблица, хоть и пустая. Не особо оптимальное использование. Для прямого вызова по адресу лучше использовать `component.invoke(address, methodName, arguments...)`.
Наконец, советую чаще использовать пустые строки. Они очень полезны, как ни странно. Я, например, отделяю каждый блок пустой строкой, кроме тех, которые в начале или в конце, — читать такое гораздо проще. По той же причине, кстати, и на форуме стараюсь абзацы короткими делать и отделять их \n\n. Примеры кода:
local function recurse(g)
return (function(f)
return g(function(x)
return f(f)(x)
end)
end)(function(f)
return g(function(x)
return f(f)(x)
end)
end)
end
print(recurse(function(rec)
return function(n)
if n == 0 then
return 1
else
return n * rec(n - 1)
end
end
end)(10))
--> 3628800
while true do
t.write("> ", true)
local tcom = t.read()
if not tcom then
os.exit()
end
local com, arg = tcom:match("(%w+)%s(%w+)")
if arg == "all" then
turn(0, coms[com], at)
else
turn(at[tonumber(arg)], coms[com])
end
end