4

次のスニペットがあります。

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 <- ...)です。誰かが私に説明してもらえますか?

4

1 に答える 1

4

この動作の説明は、?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"
于 2015-05-22T03:32:19.133 に答える