Является ли вызов таблицы допустимой операцией? - PullRequest
0 голосов
/ 19 апреля 2020

Я очень плохо знаком с lua, но мне нужно немного программировать на lua.

У меня есть следующий код

local Events={}
Events('a')

Из моего грубого понимания, Events - это таблица, и таблица не может быть вызвана как функция.

Я вставляю вышеприведенные операторы в Intellij Idea с помощью плагина Lua, Intellij Idea с подключением Emmy Lua и ZeroBrane Studio. Ни один из IDE статически не выдает ошибку в коде.

См. Рисунок. Intellij показывает зеленую галочку, указывающую на отсутствие ошибок анализа * stati c. ZeroBrane Studio не показывает никаких предупреждений или ошибок, пока я не нажму кнопку запуска.

enter image description here

https://github.com/mpeterv/luacheck говорит, что код в порядке

>luacheck --version
Luacheck: 0.23.0
Lua: PUC-Rio Lua 5.3
Argparse: 0.6.0
LuaFileSystem: 1.6.3
LuaLanes: 3.10.1

Total: 2 warnings / 0 errors in 1 file

>luacheck untitled.lua
Checking untitled.lua                             OK

Total: 0 warnings / 0 errors in 1 file

Может кто-нибудь уточнить, почему эти IDE статически не обнаруживают эту простую ошибку? Может ли вызов таблицы иногда быть допустимой операцией?

1 Ответ

2 голосов
/ 19 апреля 2020

Таблица может быть вызвана как функция, если вы дадите ей метатабле с метаметодом __call. См. Документы.

Кроме того, поскольку Lua динамически типизируется, анализатору stati c будет трудно узнать, что переменная не вызывается при попытке вызова это.

...