getNamespaceExports()
が外部コードから呼び出されたときとは異なり、.onLoad
コンテキストから自動的に呼び出されたときに異なる結果を返すのはなぜですか?getNamespaceExports()が.onLoadパッケージ関数内から呼び出されました
testpackage
というRパッケージがあるとします。このパッケージには、次の内容のhello.R
という単一のRファイルが含まれています
#' @export
package_var <- "some value"
#' @export
call_when_onload <- function(pkgname) {
print(getNamespaceExports(pkgname))
print(do.call("getNamespaceExports",list(pkgname),envir = globalenv()))
}
.onLoad <- function(libname, pkgname){
print(sprintf("Executing onload procedure for package %s...",pkgname))
call_when_onload(pkgname)
}
パッケージには、次のようになります名前空間ファイルがあります。ここでは今
# Generated by roxygen2: do not edit by hand
export(call_when_onload)
export(package_var)
を問題は、次のとおりです。文書化と構築した後パッケージ、library("testpackage")
戻ってこの:
> library(testpackage)
[1] "Executing onload procedure for package testpackage..."
character(0)
character(0)
しかし、私はtestpackage::call_when_onload("testpackage")
を呼び出すときに、私はちょうどEXPEとして次のような出力が(取得cted):
> testpackage::call_when_onload("testpackage")
[1] "package_var" "call_when_onload"
[1] "package_var" "call_when_onload"
なぜですか? .onLoad
関数は、外部コンテキストから呼び出されたときに評価されたように、上記の式を評価するにはどうすればよいですか??.onLoad
(強調鉱山)パー
エクスポートされたオブジェクトがグローバル環境に書き込まれる前に '.onLoad'が実行されることはありますか? – nilsole