Я не знаком с tolua ++, но есть смысл, что он не будет поддерживать ни один из них. tolua ++ просто вежливо информирует вас, чтобы вы не думали, что код оказывает какое-либо влияние.
Оператор присваивания не имеет смысла в контексте Lua, а оператор ~=
является отрицанием ==
, поэтому реализация operator==
заботится как о ==
, так и ~=
для вашего объекта Lua.
РЕДАКТИРОВАТЬ: Используя это место для ответа на вопрос, поставленный ниже, чтобы я мог включить код:
Правда, это объясняет соотношение неравенства, но как насчет назначения?
В Lua переменные не являются типизированными, это просто имена для значений. Оператор присваивания связывает новое значение любого типа с этим именем, он не изменяет предыдущее значение, связанное с именем (например, это значение существует где-то в памяти, не изменяется, ожидая сбора мусора, если на него больше нет ссылок существовать). Подумайте, что означает назначение для глобальной переменной:
print(math) --> table: 00516620
math = "foo"
print(math) --> foo
Эта вторая строка эквивалентна:
_G.math = "foo"
Другими словами, math=val
заменяет значение в _G["math"]
, так значит ли это переопределить operator=
для математического объекта? Ничего.
Наиболее близким к изменению оператора присваивания является метаметод __newindex
, который применяется только к таблицам / данным пользователя, поэтому не будет влиять на локальные объекты. В нашем примере math="foo"
, __newindex
будет на _G
, а не math
и даже не будет вызываться в этом случае, потому что _G.math
имеет существующее значение (__newindex
вызывается, когда вы пытаетесь присвоить значение несуществующему ключу)