tolua ++ игнорирует оператор присваивания и неравенства? - PullRequest
1 голос
/ 23 декабря 2010

Я встраиваю Lua в класс C ++.

Кажется, что tolua ++ игнорирует некоторые перегруженные операторы моего класса.

tolua ++ выдает следующие предупреждения:

  • ** tolua ++ предупреждение: нет поддержки оператора =, игнорируется
  • ** tolua ++ предупреждение: нет поддержки оператора! =, Игнорируя

Есть ли способ обойти это?

1 Ответ

4 голосов
/ 23 декабря 2010

Я не знаком с 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 вызывается, когда вы пытаетесь присвоить значение несуществующему ключу)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...