2016-03-22 4 views
-1

Я пытаюсь иметь переменную с бесконечными значениями, если вы сравните ее с 0, я хочу, чтобы она была 0 и то же самое с любым другим числом/строкой.Переменная бесконечных значений

if (epicvar == "random string") then 
+0

Итак, вы хотите что-то, что по сравнению с чем-либо всегда возвращает 0? –

+3

Это невозможно, по крайней мере, в родной Луа. В чем проблема, которую вы пытаетесь решить? Потому что это выглядит как [проблема X-Y] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). –

+1

Я бы предложил '__eq', но он срабатывает только в том случае, если оба типа имеют одинаковый метатет. С яркой стороны вы всегда можете заменить свое сравнение «истинным», так как вы знаете ответ заранее! – warspyking

ответ

0

Это невозможно. Я не знаю ни одного языка, который бы предлагал это поведение.

Одна переменная может хранить только конечное количество информации. Вы можете хранить несколько значений в переменной, но желание «бесконечных значений» подсказывает мне, что вы должны немного читать и знакомиться с фундаментальными концепциями программирования.

Существует постоянная math.huge, которая используется для представления значения of + infinity. Однако это дискретное значение.

И просто для удовольствия, хакерский способ эмулировать это поведение может заключаться в создании экземпляра класса Lua, содержащего функцию, которая всегда возвращает true. Опять же, это просто для удовольствия. Вы не можете определить переменные с бесконечными значениями.

local Magic = {} 
Magic.__index = Magic 

-- (i'd also suggest a toggable "epicvar" flag to enable/disable the property) 
function Magic.new() 
    return setmetatable({}, Magic) 
end 

function Magic.compare(self, randomVar) 
    return true 
end 

local m = Magic.new() 

-- m:compare(...) always returns true no matter what you give it 
if m:compare("random string") then 
    print('success') 
end 
+0

Я пытаюсь найти способ обойти простую систему безопасности (мы обсуждаем это на форуме, и я хотел бы знать, можно ли обойти) currentIP = server.getIP() if (tostring (serverIP) == "192.168.1.1") then blockCode end Я хочу переписать переменную 'serverIP' с чем-то, что всегда будет возвращать true в сравнении, например Ares

+0

Если вы можете изменить значение * any * одну из этих переменных ('server',' currentIP' или 'serverIP'), вы можете обойти проверку. Однако вы не можете изменять переменные в отдельных исходных файлах, если только вы не отредактируете исходный код или (2) отредактируете внешнюю функцию или переменную, на которую ссылается исходный код. Найдите, где эти переменные определены. Если вы можете изменить 'server', вы сможете сделать:' server = {getIP = function() return true; end} '. – collinjsimpson

Смежные вопросы