1

私は最近、R にはレキシカル スコープと動的スコープの両方が利用できることを知りましたが、デフォルトではレキシカル スコープを使用します。次のケースは本当に私を混乱させました:

> x <- 1
> f <- function(y) { x + y }
> f(5)  # we expect 6    
[1] 6
> x <- 10
> f(5)  # shouldn't we again expect 6?
[1] 15

それが呼び出された場所ではなく、定義さfれた環境を使用して評価されるべきではありませんか? このレキシカルスコープはどうですか?ありがとう!

4

1 に答える 1

2
f <- function(y) { x + y }

はグローバル環境で定義されているため、関数自体で定義されていない部分 (つまりx) については、R はそれらについてグローバル環境を参照します。

a=1
b=2
f<-function(x)
{
  a*x + b
}
g<-function(x)
{
  a=2
  b=1
  f(x)
}
# compare f(2) and g(2)

上記の例はhereからのもので、良い議論を提供します。要点は、f()withinとing()の定義を無視することです。abg()


「Scope」のwikiより

オブジェクト指向プログラミングでは、動的ディスパッチによって実行時にオブジェクト メソッドが選択されますが、実際の名前バインディングがコンパイル時と実行時のどちらで行われるかは、言語によって異なります。

于 2013-12-13T17:53:43.867 に答える