Видите, вы не можете рассматривать функции / замыкания как таблицы. Рассмотрим следующий код:
local table = {
baz = {
blah = "bar"
},
foo = table.baz.blah
}
в этом случае вы выполняете эквивалент доступа к чему-то в более узкой области из более широкой области. Это невозможно с функциями, что означает, что если бы это было так, то вы могли бы получить доступ к локальным переменным, которые вы не могли нормально.
Теперь исправим ваш код:
local __cmp__table = {
[">"] = function(a,b) return a>b end,
[">="] = function(a,b) return a>=b end,
["<"] = function(a,b) return a<b end,
["<="] = function(a,b) return a<=b end,
["=="] = function(a,b) return a==b end,
["~="] = function(a,b) return a~=b end,
}
cmp = function(a, op, b)
return __cmp__table[op](a,b)
end
Это позволит вам вызывать cmp для любых двух переменных с соответствующей функцией сравнения. Если я пропустил пункт о вашем коде, то, пожалуйста, скажите мне!