Lua表中动态引用方法,传递的参数为空

我正在创建一个动态表方法引用,并尝试传递单个参数给该方法。动态方法引用确实起作用,表方法按预期调用,但是我传递给该方法的完全不是nil的参数在方法内部为nil。您能指出我的问题所在吗?...

这是一个演示示例,第一行在Consider:Move方法中,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 )
点赞
用户796375
用户796375

使用冒号运算符定义的函数会隐藏一个额外的第一个 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
2019-04-07 15:53:08