2011-03-16 3 views
2

늦은 시간에 복잡한 코드 두 가지 순환 방법을 고려하십시오. 즉,이 두 기능은 다음과 같이 :심볼 방식으로 반복적으로 메소드를 호출 할 수있는 방법이 있습니까?

void foo(int x) 
{ 
    ... foo(x); 
} 

void bar(int x) 
{ 
    ... foo(x); // oops, I meant "bar" 
} 

이 내가 바란 (그리고 난 아직도 소원) "자기"와 같은 상징적 전화를 가지고 여러 번, 그래서 나는 이런 식으로 재 작성 수 :

void foo(int x) 
{ 
    ... self(x); 
} 

void bar(int x) 
{ 
    ... self(x); // great! this is what i meant --> bar 
} 

내가 생각할 수있는 유일한 해킹은 호출 스택에서 호출자를 얻고 호출하는 일반 함수 "self"를 작성하는 것입니다. 그러나 상속와 함께 사용할 수없는 것 :

void inherited(int x) 
{ 
    base.self(x); 
} 

이 :-)/등 귀하의 의견/아이디어 주셔서 대단히 감사합니다

답변

0

더주의를 기울이 코드를 작성할 때? 나는 왜 당신이 그것을 원하지만 어쩌면 내가 뭔가를 놓치고 있는지 이해하지 못합니다. 요약하면, 나는 당신이 반사없이 그것을 할 수 있다고 생각하지 않는다. 그리고 그 시점에서 그것은 잔인 할 것이다.

+2

으로. 재귀 람다 함수는 매우 유용 할 것이다. 이제는 람다 함수의 본문을 선언하기 전에 람다 함수를 포함하는 변수를 선언해야합니다. – xanatos

+0

네, 유효한 유스 케이스입니다. –

0

사용 F 번호)

(그들 자신 내에서 재귀 경우 기능 rec으로 표시됩니다 필요로하고, 당신이 함께하는 "and"상호 재귀 기능을 가지고있는 - 실수 컴파일러 오류를 만들기)

+0

오, 물론 F #의이 부분은 이미 좋아합니다. 특히 프로그래머가 재귀 함수를 표시하도록 강요하지만 "잠시 동안"나는 C#을 사용합니다. 모든 F # 기능이 그다지 훌륭하지는 않습니다. – greenoldman

관련 문제