2013-12-13 90 views
1

我最近了解到R有詞彙和動態範圍可用,但默認情況下它使用詞法範圍。接下來的情況真的讓我感到困惑: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使用環境下進行評價它定義,而不是它被稱爲(和當時的!)?這個詞彙範圍如何?謝謝!

回答

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,並給出了一個很好的討論。要點之中,內g()f()忽略了ag()b的定義。


wiki on "Scope"

在面向對象的程序設計,動態調度在運行時選擇對象的方法,但是否實際名稱綁定在編譯時完成或運行時依賴於語言。

+0

是的,我得到的那部分,但不應該它也使用環境*在當時*它被定義?我編輯了我的問題,以使這一部分更加清晰。 – Godel

+0

我不確定自己爲什麼應該這樣做,因爲它會在每次通話時重新檢查環境。請記住'R'是在考慮交互式編程的基礎上開發的。 –

+0

所以,在當時使用環境*你定義的地方不是詞法範圍定義的一部分嗎?或者這不是R使用的詞彙範圍? – Godel