3.2 - Операторы сравнения

Lua поддерживает следующие поераторы сравнения:
    <   >   <=  >=  ==  ~=
Все эти оператры всегда возвращают либо true, либо false.

Операторr == проверяет эквивалентность, а оператор ~= - неэквивалентность. Оба оператора можно применять к любым двум значениям. Если значения различных типов, Lua считает, что значения различны. В противном случае, Lua сравнивает их сообразно их типу. В частности, nil эквивалентен лишь самому себе.

Lua сравнивает таблицы, userdata и функции по ссылкам, т.е. два таких значения считаются эквивалентными только в том случае, если указывают на один и тот же объект. Например, в результате выполнения

    a = {}; a.x = 1; a.y = 0
    b = {}; b.x = 1; b.y = 0
    c = a
получится, что a==c, но a~=b.

Все операторы можно применять только к двум числам или к двум строкам. Числа Lua сравнивает обычным порядком. Строки сравниваются в алфавитном порядке, который зависит от установленной для Lua локали. Например, в случае локали European Latin-1, получится "acai" < "açaí" < "acorde". Другие типы данных могут сравниваться только на эквивалентность (и неэквивалентность).

Когда сравниваются значения различных типов, необходимо проявлять осторожность: Помните, что результатом "0"==0 будет false. Более того, 2<15 естественно true, но "2"<"15" будет false (алфавитный порядок!). Чтобы избежать противоречивых (а то и несовместимых) результатов, Lua выдаст ошибку при попытке сравнить число и строку (типа 2<"15").


Hosted by uCoz