【发布时间】:2016-03-13 19:12:51
【问题描述】:
我是 Python 新手。有人可以解释函子值的来源。 Functor = msg.functor,但没有对 functor 一词的解释,我试过用谷歌搜索它,但一无所获。 .val 关键字也没有在任何地方解释,我可能是昏暗的,但我找不到任何例子。
def process_action(self, msg, sender):
assert msg.get_type() == pedroclient.PObject.structtype
functor = msg.functor
assert functor.get_type() == pedroclient.PObject.atomtype
cmd_type = functor.val
cmd = msg.args[0]
if cmd_type == 'stop_':
assert cmd.get_type() == pedroclient.PObject.structtype
cmd_functor = cmd.functor.val
#if cmd_functor in ['pickup', 'putdown']:
self.stop_arm(cmd.args[0].val)
#else:
# self.stop_arm(cmd.args[0].val)
elif cmd_type in ['start_', 'mod_']:
self.start_animate()
assert cmd.get_type() == pedroclient.PObject.structtype
cmd_functor = cmd.functor.val
if cmd_functor == 'pickup':
self.pickup(cmd.args[0].val, cmd.args[1].val, sender)
elif cmd_functor == 'putdown':
if cmd.args[1].get_type() == pedroclient.PObject.inttype:
self.putdown_on_block(cmd.args[0].val, cmd.args[1].val,
sender)
else:
self.putdown_on_table(cmd.args[0].val, cmd.args[1].val,
sender)
elif cmd_functor == 'go_home':
self.go_home(cmd.args[0].val)
编辑:抱歉还有很多代码,我已经尽可能地略读了。
def process_msg(self, term):
msg = term.args[2]
sender_process = term.args[1].args[0].args[1].val
robotID = int(sender_process[-1])-1
#print msg
if str(msg) == "initialise_":
robotID = int(sender_process[-1])-1
def data_cb(self, event):
self.env.process_msg(event.notification)
我能理解的最好的就是functor是msg的一个属性,又是系统输入的参数,其中系统输入是一个事件通知。我是正确的还是完全走错了方向。
【问题讨论】:
-
这段代码有部分缺失,不是吗?
msg的定义在哪里?你向这个函数传递了什么? -
functor = msg.functor告诉你functor是对象msg的一个属性。接下来你要做的就是找出msg是什么。 -
干杯,是的,缺少代码,谢谢你们。