제목 | php로 currying 구현 하기 | ||
---|---|---|---|
글쓴이 | 한대승(불의회상) | 작성시각 | 2014/08/18 19:31:19 |
|
|||
이거시 무슨 말인가 했더니 아래 처럼 함수를 만들 수 있다는 이야기 입니다. function curry($fun) { return function($arg) use ($fun) { return $fun($arg); }; }사용 할때는 $to_int = curry('intval'); echo $to_int('123'); // 결과 : 123이렇게 함수를 인수로 전달해주고 함수를 결과로 받아 사용이 가능하다는거죠. 그럼 아래의 경우는 어떻게 해야 할까요? function curry2($fun) { return function($s_arg) use ($fun) { return function($f_arg) use ($fun, $s_arg) { return $fun($f_arg, $s_arg); }; }; } // currying 할 함수 function div($n, $d) { return $n / $d; } 한개도 복잡한데 리턴하는 함수가 두개네요... ㅡㅡ;; 하나씩 풀어가면 간단한데... $divf = curry2('div'); $div10 = $divf(10); echo $div10(50); // 결과 : 5함수 2개 리턴한다고 변수를 2개 써야 하네요.... 혹시나 하고 요렇게 해봤는데.... $div10 = (curry2('div'))(10); // Parse error: syntax error, unexpected '(' in ......역시나 에러만.... 구글신에 접신해 보니 __invoke() 라는게 걸리네요. 혹시나 하고 덮붙여 봤습니다. echo curry('intval')->__invoke('11'); // 결과 : 11 $div10 = curry2('div')->__invoke(10); echo $div10(50); // 결과 : 5 echo curry2('div')->__invoke(10)->__invoke(50); // 결과 : 5 어잌후~~ 이게 웬 떡입니까? 구글신 덕분에 재밌는거 알게 되었습니다. PHP도 함수를 클래스로 처리 하나??? |
|||
다음글 | 디비로 동적 라우팅 구성하기. (5) | ||
이전글 | 함수 전달 인자를 유연하게 처리 할 수 함수 예제 (3) | ||
변종원(웅파)
/
2014/08/20 15:51:43 /
추천
0
어디 다 써야할까요? ^^
|
kaido
/
2014/08/20 18:38:24 /
추천
0
비슷 하다면 비슷한 유형인데..
저는 가변변수 중첩 선언도 이해가 안 가던데요. $$$$data = "data1";이거 대체 어디다가 쓰는건가요... 무얼 지칭 하는지도 알기 어렵고 잘못보면 오타로 보이기도 합니다. |
한대승(불의회상)
/
2014/08/21 14:26:43 /
추천
0
물론 함수형 프로그래밍에 사용합니다.
함수형 프로그래밍을 학습 중인데 마구마구 영감이 떠오르네요. 조만간 간단히 정리해서 샘플 올리도록 하겠습니다. |