Lua мульти-пользовательский (например, `Между`) оператор - PullRequest
1 голос
/ 10 мая 2019

Допустим, я хочу сделать оператор between, что-то вроде

if (a) '<' (b) '<' (c) then

Возможно ли это? Я надеялся, что это сработает, но это не

debug.setmetatable(0, {
    __call = function(a, firstOperator)
        if firstOperator == '<' then
            return function(b, secondOperator)
                if secondOperator == '<' then
                    return function(c)
                        return a < b and b < c
                    end
                end
            end
        end
    end
})

1 Ответ

5 голосов
/ 10 мая 2019
debug.setmetatable(0, {
   __call = function(a, firstOperator)
      if firstOperator == '<' or firstOperator == '<=' then
         return function(b)
            return function(secondOperator)
               if secondOperator == '<' or secondOperator == '<=' then
                  local loadstring = loadstring or load
                  local dynamic_code = [[
                     local a, b = ...
                     return function(c)
                        return a ]]..firstOperator..[[ b and b ]]..secondOperator..[[ c
                     end
                  ]]
                  return loadstring(dynamic_code)(a, b)
               else
                  error("Wrong syntax", 2)
               end
            end
         end
      else
         error("Wrong syntax", 2)
      end
   end
})

print((1) '<' (2) '<' (3))   --> true
print((1) '<='(1) '<='(1))   --> true
print((1) '<' (2) '<' (0))   --> false
print((4) '<' (2) '<' (3))   --> false
print((1) '<' (0) '<' (3))   --> false
print((1) '<' (4) '<' (3))   --> false
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...