當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


R ns-hooks 命名空間事件的鉤子


R語言 ns-hooks 位於 base 包(package)。

說明

包可以提供在加載、附加、分離或卸載時調用的函數。

用法

.onLoad(libname, pkgname)
.onAttach(libname, pkgname)
.onUnload(libpath)
.onDetach(libpath)
.Last.lib(libpath)

參數

libname

一個字符串,給出定義名稱空間的包所在的庫目錄。

pkgname

給出包名稱的字符串。

libpath

給出包的完整路徑的字符串。

細節

加載後,loadNamespace 查找名為 .onLoad 的鉤子函數,並在密封命名空間和處理導出之前調用它(使用兩個未命名參數)。

當附加包時(通過 libraryattachNamespace ),將查找鉤子函數 .onAttach ,如果找到則在密封包環境之前調用(使用兩個未命名參數)。

如果函數 .onDetach 位於命名空間中或 .Last.lib 從包中導出,則當包被 detach 編輯時,將調用該函數(使用單個參數)。請注意,如果 .onAttach 失敗,它可能會被調用,因此應該防禦性地編寫它。 (它在 tryCatch 內調用,因此錯誤不會阻止包被分離。)

如果卸載命名空間(通過 unloadNamespace ),則在最終卸載之前運行鉤子函數 .onUnload (使用單個參數)。

請注意,.onLoad.onUnload 中的代碼不應假定除基本包之外的任何包位於搜索路徑上。當前包中的對象將是可見的(除非規避了這一點),但應導入其他包中的對象或應使用雙冒號運算符。

.onLoad.onUnload.onAttach.onDetach 被視為命名空間中的內部對象,不應導出(而 .Last.lib 應導出)。

請注意,包不會分離,命名空間也不會在包結束時卸載。R除非用戶安排這樣做(例如,通過 .Last)。

命名空間函數所需的任何內容都應在加載/卸載時由.onLoad.onUnload鉤子。例如,可以加載 DLL(除非由useDynLib指令中的‘NAMESPACE’文件)並在中初始化.onLoad並卸載於.onUnload.采用.onAttach僅適用於僅當包對用戶可見時才需要的操作(例如 start-up 消息)或需要在創建包環境後運行。

好的做法

加載命名空間應盡可能保持靜默,並由 .onAttach 給出啟動消息。這些消息(以及 .onLoad 中的任何重要消息)應使用 packageStartupMessage,以便在分散注意力的情況下將其靜音。

不應該有任何電話library也不require在這些鉤子中。一個包加載其他包的方式是通過‘⁠取決於⁠' 中的字段DESCRIPTION’ 文件:這可確保記錄依賴性並按正確的順序加載包。加載命名空間不應更改搜索路徑,因此不應附加包,而是應通過(有選擇地)從其他包的命名空間導入來實現命名空間對另一個包的依賴。

使用帶有參數 helplibrary 來顯示有關包的基本信息,應在計算的包信息對象上使用 format 並將其傳遞給 packageStartupMessage

不應該有任何電話installed.packages在啟動代碼中:它可能非常慢並且在以下版本中可能會失敗R如果軟件包安裝並行進行,則在 2.14.2 之前。請參閱其幫助頁麵以獲取替代方案。

應加載已編譯的代碼(例如,通過 library.dynam) 在.onLoad或一個useDynLib指令中的‘NAMESPACE' 文件,而不是在.onAttach。同樣,不應卸載已編譯的代碼(例如,通過 library.dynam.unload) 在.Last.lib也不.onDetach, 隻有在.onUnload.

也可以看看

setHook 展示了用戶如何在相同事件上設置鉤子,並列出了涉及所有鉤子的事件序列。

reg.finalizer 用於在會話結束時運行的鉤子。

loadNamespace 了解有關命名空間的更多信息。

相關用法


注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Hooks for Namespace Events。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。