2012-08-13 35 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

相關問題