什么是回调机制以及它如何应用于R

时间:2012-08-13 14:33:49

标签: r

有人可以用简单的非计算机科学术语向我解释一下R中的回调功能是什么(taskCallbackgetTaskCallbackNamestaskCallbackManager ......等等?我看过R帮助,但我觉得这些信息太抽象了。

它的设计是什么,用户如何使用它们?

如果有人可以解释一般概念(在R和其他计算机语言中),并在R中提供示例,我会非常感激,因为我从未真正理解过。是否必须对递归函数执行任何操作,或者我是否被名称回调误导?

2 个答案:

答案 0 :(得分:4)

我对R不太了解,所以我不能在这里深入研究任何R细节。话虽如此:

通常,在命令式,过程式和函数式编程语言中(也可能在其他一些范式中),调用函数将阻塞直到该函数完成,并将函数的结果传递给调用者。这通常是一种很好的做事方式,但在某些情况下,我们可能会有一些要求,这使得这种做法不太可行。

对于长时间运行的操作,我们可能不想长时间阻止调用者。根据我们所处的环境,调用者可能无法生成另一个线程,或者可能的线程数可能太小而无法容纳所需数量的并行调用,因此以这种同步方式执行长时间运行的操作会给你一个非常糟糕的经历。具有单线程模型的JavaScript以及频繁访问服务器的典型示例就是典型的例子。

所以Callbacks的基本思想是,当实际处理完成时,调用者不是让被调用的函数返回,而是传递一个Callback对象(在OOP中,在其他类似的范例中,例如回调函数,通常是匿名的,用于函数式编程)。被调用的函数将立即返回,释放调用线程来执行其他操作。当长时间运行的进程完成时,将调用Callback,并且调用者可以处理长时间运行的进程给出的结果。

这个模式可以稍微概括一下,因此不仅在处理结束时调用回调,而且在处理时定期,提供某种状态更新,因此调用者可以例如向用户显示一些反馈(状态栏,估计完成时间......)。另一个常见的添加是调用者在处理任务时取消任务的方法。

这是一般原则。也许更有知识的人可以填写如何适用于R的细节以及R与此一般描述的不同之处。

答案 1 :(得分:4)

可以找到详细信息和示例here

基本思想不涉及递归,而是为发出给R命令行的每个顶级命令调用一个函数(或函数)。

一个用途是在TeachingDemos包中,txtStart和相关函数使用任务回调将每个命令及其结果输出的副本保存到外部文件中,从而创建交互式会话的记录。