| 제목 | 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
물론 함수형 프로그래밍에 사용합니다.
함수형 프로그래밍을 학습 중인데 마구마구 영감이 떠오르네요. 조만간 간단히 정리해서 샘플 올리도록 하겠습니다. |