2012-06-20 4 views
3

조건을 충족 할 때까지 함수를 호출하기위한 코드를 얻었지만 매우 진보적 인 단계가 아니므로 코드가 명확하지 않습니다. 여기 코드를 제출할 것입니다. 코드가 어떻게 작동하는지에 대해 논의하십시오. 이 기능이 후 많은 인수가 전달 불리는 점점 때C에서 조건을 만날 때까지 함수 호출 #

RunToFirstMatch(v => (v >= 5), Step1,()=>Step2(1,1), Step3, Step4,()=>0+1); 

RunToFirstMatch 기능 만이 인수를 다음과 같이

public static void RunToFirstMatch<T>(Func<T, bool> sentry, params Func<T>[] functions) 
{ 
    functions.Any(f => match(f())); 
} 

코드는 내가 단지에 대해 이해하지 못하는 ....라고 함수 호출. 고마워 해주세요.

+0

또 다른 동일한 접근법은 여기에 본 http://www.codeproject.com/Tips/174241/Call-Functions-Until-One-Meets-Condition 나에게 명확하지 않습니다. – Thomas

+0

난 당신이 함수에 매개 변수 이름을 혼합 생각합니다. '보초'는'일치'또는 그 반대로 이루어져야합니다. – sloth

답변

2

두 번째 인수 인 params Func<T>[] functions은 실제로 "많은 Func<T>을 후속 인수로 전달하고이를 functions이라는 배열에 표시하는 것을 의미합니다." 이는 params keyword에 의해 발생합니다.

따라서 당신은

RunToFirstMatch(v => (v >= 5), Step1,()=>Step2(1,1), Step3, Step4,()=>0+1) 

당신이

sentry = v => (v >= 5); /* or should this be called match? */ 
functions = new Func<T>[] 
    { 
     Step1, 
     ()=>Step2(1,1), 
     Step3, 
     Step4, 
     ()=>0+1 
    }; 
5

이에 대한 몇 가지 부분이 있습니다 얻을 호출 할 때, 그리고 초보자가 이해하기이 코드는 조금 하드 찾을 수있는 이유를 알 수 있습니다.

첫 번째 방법은 두 개의 인수를 취하지 않으며 두 번째 숫자는 params으로 표시됩니다. 즉, 첫 번째를 제외한 모든 인수가 functions의 배열로 전송되는 모든 메서드가이 메서드에 전달됩니다. on the C# params keyword).

다음으로이 메서드는 메서드 중 하나가 true를 반환 할 때까지 어떤 열거 형 (예 : 인수 functions)을 열거하는 확장 메서드 IEnumerable<T>을 사용합니다.

나는 당신이 matchsentry을 변경하고, 무슨 일이 가정을 만드는 것은 (배열 functions에서 각 기능이 실행되고, 결과가 match 함수에 전달한다는 것입니다 것 같아요, 당신은 다음 혼합 일부 매개 변수를 생각 true 또는 false를 반환합니다). true를 반환하는 첫 번째 메서드는 종료합니다. 그래서 예로서

는 대략 자신을 기준으로 4 & 5하지 않습니다 그러나

RunToFirstMatch(v => (v >= 5), // match 
       () => 1,() => 4,() => 9,() => 20,() => 40); //function(s) 

1 단계, 2 & 3가 실행됩니다 (3 false를 돌려 처음이다).

+1

3이되지 않습니까? 일치하는지 확인하려면 실행해야합니다. – Rawling

+1

@ Rawling - 너와 너의 ..... 논리. – Jamiec

3

나는 그것이

public static void RunToFirstMatch<T>(Func<T, bool> sentry, params Func<T>[] functions) 
{ 
    functions.Any(f => sentry(f())); 
} 

해야한다고 생각하지만, 이제 단계적으로 가자으로 코드에 약간의 오류가 있다고 생각 :

보초가에 따라 것을 결정한다 술어입니다 입력 (중입니다 형식 T) 뭔가가 사실이라면 - 이것은 함수를 제공하는 첫 번째 예 - 이것은 v >= 5입니다 - 그래서 그것은 int 걸릴 것입니다 (귀하의 예를 들어 명확하지 - 예를 들어 더블 수도) 그리고 그것이 더 큰지 확인하십시오. 5

다음 당신은 파라미터 배열을 가지고 있습니다 각각의 함수를 제공합니다 T 파라미터 배열은 하나 이상의 함수를 제공 할 수있는 이유입니다.

Any는 멋진 트릭입니다. 제공된 함수 (param 배열)를 통해 평가 한 다음 평가 한 다음 결과를 보냅니다. 보초 부대가 진실이라면 모든 기능이 멈추고 기능은 정확히 무엇을 말합니다.