Динамическая ссылка на метод таблицы Lua, параметр передан в null - PullRequest
1 голос
/ 07 апреля 2019

Я создаю ссылку на метод динамической таблицы и пытаюсь передать один параметр в метод.Ссылка на динамический метод работает, и табличный метод вызывается так же, как и ожидалось, однако параметр , полностью не ноль , который я передаю методу, равен нулю внутри метода.Можете ли вы указать на мою ошибку в этих 2 строках? ...

Вот небольшой рабочий пример, который демонстрирует.На первой строке в методе «Рассмотреть: перемещение» значение mons равно nil

local Consider = {}
function Consider:Move( mons  ) 
    print( 'Mons ' .. mons.type .. ' considering Move...')
    actionChosen.score = 0
    return actionChosen
end

local mons = { type = 'Blue' }
local actionPref = 'Move'
local considerAction = Consider[actionPref]
print( 'MonsterAI:chooseAction mons: ', mons.type )
local actionTest = considerAction( mons )

1 Ответ

4 голосов
/ 07 апреля 2019

Функции, определенные с помощью оператора двоеточия, скрывают дополнительный первый аргумент self. function Consider:Move(mons) является синтаксическим сахаром для function Consider.Move(self, mons).

Вызов функции, подобной considerAction(mons), устанавливает скрытый аргумент self вместо желаемого.

Возможно, вы захотите передать таблицу Consider как self:

considerAction(Consider, mons)

Или, альтернативно, определите функцию, используя оператор точки, если вам не нужно self:

function Consider.Move(mons)
  print('Mons ' .. mons.type .. ' considering Move...')
end
...