2017-03-01 1 views
1

누구든지 아래의이 코드에서 잘못된 점을 설명 할 수 있습니까? 내가 생각 내가 여기서 뭐하는 거지 것은재귀 기본 인수 참조

  • 전역 변수 a=5
  • 하나 개의 인수를 취하는 함수 fun의 정의의 선언 인 상기 전역 변수 기본값 a

때 어떤 파라미터도없이 fun()을 호출하면 지역 변수 a은 전역 변수 a의 사본이되고 기능 코드의 어느 지점에서나 전역 변수보다 우선합니다 a (unles 나는 구체적으로 get("a", envir=parent.frame)을 사용합니다.

하지만 틀림에 틀림 없습니다. 그것은 왜 허용되지 않습니까?

> a = 5 
> fun = function(a=a) { a + 1 } 
> fun(4) 
[1] 5 
> fun() 
Error in fun() : 
    promise already under evaluation: recursive default argument reference or earlier problems? 
+0

잠시 시간을내어 [포맷 도움말] (http://stackoverflow.com/editing-help)을 읽어보십시오. –

+0

결국 과 같은 코드를 만들고 싶었습니다.'fun <- function (a = environment (fun) $ a) {a +1}' – jogo

답변

1

내가 매개 변수없이 fun()를 호출 할 때 지역 변수 a는 전역 변수 a

없음의 복사본이된다 : 기본 인수가 함수의 범위 내에서 평가됩니다. 코드는 다음 코드와 유사합니다

fun = function(a) { 
    if (missing(a)) a = a 
    a + 1 
} 

이가 더군요 명확하게하고 코드가 작동하지 않는 이유를 설명합니다.

기본 인수는 true입니다. 명시 적으로 전달 된 인수는 호출자의 범위에서 (물론) 평가됩니다.

+0

당신이 말한 내용이 LHS와 RHS의 양 쪽 모두 * a *는 함수 범위 내에서 평가됩니까? – Met

+0

@Mat Yes. 정상적인 할당에 관해서. –