次のスニペットがあります。
y <- 1
g <- function(x) {
y <- 2
UseMethod("g")
}
g.numeric <- function(x) y
g(10)
# [1] 2
y
にアクセスできる理由がわかりませんg.numeric <- function(x) y
。私の理解では、 y のスコープはジェネリックの定義の範囲内(g <- ...)
です。誰かが私に説明してもらえますか?
この動作の説明は、?UseMethod
ヘルプ ページにあります。
UseMethod は、ジェネリックに渡されたときに一致する引数を使用して、新しい関数呼び出しを作成します。UseMethod の呼び出し前に定義されたローカル変数はすべて保持されます
したがって、関数呼び出しで定義されたローカル変数は、UseMethod
ローカル変数として次の関数に渡されます。あなたはこれを見ることができます
g.numeric <- function(x) ls() #lists all variables in current environment
g(10)
# [1] "x" "y"
g.numeric(10)
# [1] "x"