2012-08-13 49 views
2

有人可以用更简单的非计算机科学术语向我解释什么是R中的回拨功能(taskCallback,getTaskCallbackNames, taskCallbackManager等)?我看了R的帮助,但是我发现信息太抽象了。什么是回拨机制以及它如何应用于R

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

如果有人能解释一般概念(在R和其他计算机语言中),并在R中提供示例,我将非常感激,因为我从来没有真正理解。它是否必须对递归函数做任何事情,还是被名称回调误导了?

回答

4

我不太了解R,所以我无法深入研究这里的任何R细节。这就是说:

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

对于长时间运行的操作,我们可能不想长时间阻止呼叫者。根据我们所处的环境,调用者可能不会产生另一个线程,或者可能的线程数量可能太小而不能满足所需的并行调用数量,因此以这种同步方式进行长时间运行的操作会带来非常不好的体验。带有单线程模型的JavaScript以及频繁地需要调用服务器的代码就是一个典型的例子。因此,Callbacks的基本思想是,当实际处理完成时,调用者传入一个Callback对象(在OOP中,在其他范例中类似的东西,例如回调函数,通常是匿名的,用于功能性编程)。被调用的函数将立即返回,释放调用线程来做其他事情。当长时间运行的过程完成时,回调将被调用,并且调用者可以处理长时间运行过程中给出的结果。

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

这是一般原则。也许有人更多knowledegable可以填写的细节,这是如何适用于R和R不同于这个一般性的描述。

+0

谢谢你这么高层次的解释..我现在对它有了更好的理解...... :) – lalas 2012-08-14 04:53:17

4

查看详细信息和示例here

基本思想不处理递归,而是针对发给R命令行的每个顶级命令调用一个或多个函数。

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

+0

什么意思是“顶级命令”?你的意思是用R编写的函数,而不是C?我看到链接中给出的例子,但我没有看到它的用法(对不起,这可能是由于我的无知,而不是文章本身..我相信,如果可以的话,这将会很有意义看看为什么/我该如何使用这些回调机制)..也许,教学演示中的例子可能会提供一个更好的概念说明..干杯.. :) – lalas 2012-08-14 04:59:28

+0

顶级命令是你输入的命令提示符,因此'1 + 1'是顶级命令,但运行一堆命令的'for'循环在命令提示符下键入时将是单个顶级命令。尝试链接文档中的示例,并输入不同的内容来查看计数器更改的频率和时间,每次更改都是顶级命令。 – 2012-08-14 17:33:55

相关问题