我正在创建动态表方法引用,并尝试将单个参数传递给该方法。动态方法引用确实可以正常工作,并且按预期方式调用了table方法,但是我传递给该方法的完全不为零参数在该方法内部为nil。您能在这两行中指出我的错误吗?...
这是一个演示的小示例。在Ask: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 )
答案 0 :(得分:4)
使用冒号运算符定义的函数将隐藏其他第一个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