我正在创建一个动态表方法引用,并尝试将单个参数传递给该方法。动态方法引用确实有效,并且table方法被调用就像预期的那样,但是我传递给方法的完全不是nram参数在方法中是nil。你能在这两行中指出我的错误吗?...
这是一个小的工作示例,演示。在考虑:移动方法的第一行,mons是零
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 )
使用冒号运算符定义的函数会隐藏另一个第一个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