我是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)
我能理解的最好的是,仿函数是msg的一个属性,而msg又是系统输入的参数,其中系统输入是一个事件通知。我正确还是完全朝着错误的方向前进。
答案 0 :(得分:1)
通过Google搜索我找到了文档,可能会解释您的部分内容: The Pedro 1.6 Reference Manual
关于functor
我没有找到关于那个(但没有花太多时间)。很可能,Pedro被用作向一些(真实或虚拟)机器人发送命令的消息系统。机器人由消息控制,消息具有一些结构,包括仿函数,可能识别应执行的动作类型,以及定义该动作参数的值。
答案 1 :(得分:1)
由于Python允许将函数作为值传递,因此Functor基本上是一个函数对象。请注意,在您发布的代码中,您将多次比较哪个函数。
在cmd_type = functor.val
行上,您实际上将cmd_type归因于函数本身,稍后您将其与它进行比较以了解它究竟是哪个函数。
if cmd_type == 'stop_':
是函数stop()?
elif cmd_type in ['start_', 'mod_']:
是这些函数之一,start(),mod()?
依此类推......进一步阅读here
编辑:我发现this主题与理解functor的概念非常相关,虽然它没有引用python但python有很多函数式编程功能。
答案 2 :(得分:1)
基本的东西 - 消息&仿函数可能在这些地方:
.val - 这很可能是包含数据的属性。它不是我能找到的任何类型的Python关键字。我敢肯定你认为它可能是“价值”的缩写。它可以在对象中定义(functor,cmd.args []),也可以在某些高级对象中导入,从而继承val。
答案 3 :(得分:0)
functor
是msg
对象的属性;如果没有看到该对象的定义,我们就无法告诉您更多信息。同样,val
又是msg
的属性。