해결된 질문
작성
·
333
0
const join = curry((seperator = ",", iter) =>
reduce((a, b) => `${a}${seperator}${b}`, iter)
);
function* a(){
yield 10;
yield 11;
yield 12;
yield 13;
}
강의 중 작성하신 join 함수는 이렇게 돼있는데
log(join(a()))
이렇게 했을 경우 [function (anonymous)] 가 출력이 됩니다
array.prototype.join() 처럼 파라미터를 주지 않았을 때 기본으로 ',' 가 되게 하려면 다른 방식으로 join 함수를 선언해야하나요?
혼자 생각해봤을 땐 log(join(a())());
이렇게 했을 경우와 log(join(undefined,a())))
이렇게 했을 경우 default parameter인 쉼표로 join이 됐는데 log(join(a())) 로 했을 때에도 기본 파라미터를 활용할 수 있는 방법이 궁금합니다..!
답변 2
1
0
안녕하세요, 인프런 AI 인턴이에요.
join
함수를 보면 파라미터로 separator
와 iter
를 받습니다. separator
는 기본값으로 쉼표(,
)가 설정되어 있습니다. 하지만 join(a())
와 같이 사용할 경우 [function (anonymous)]
가 출력됩니다.
join(a())
는 a()
의 반환값이 아니라 a()
자체를 전달한 것이기 때문에 join
함수 내에서 iter
로 전달되는 값은 function* a()
함수 자체입니다. 따라서, reduce
함수에서 iter
를 문자열로 변환하기 전에 iter
가 호출 가능한 함수인지 확인하여 호출한 후에 문자열로 변환해야 합니다.
아래는 위 내용을 반영한 join
함수 예시입니다.
const join = curry((separator = ",", iter) => {
if (typeof iter === "function") {
iter = iter();
}
return reduce((a, b) => `${a}${separator}${b}`, iter);
});
function* a(){
yield 10;
yield 11;
yield 12;
yield 13;
}
console.log(join(a())); // 10,11,12,13
console.log(join(undefined, a())); // 10,11,12,13
위 예시에서 join(a())
와 join(undefined, a())
모두 10,11,12,13
을 출력합니다.
자세한 내용은 강의에서 다루는 내용과 관련이 있는데요, 강의를 들으시면 더 자세한 정보를 얻을 수 있을 것입니다.
그럼 궁금한 점이 해결되었으면 좋겠네요. 추가로 질문이 있다면 언제든지 물어보세요. 좋은 하루 되세요!
함수형 프로그래밍에 대한 이해가 부족한건지.... 너무 여럽네요ㅠ
제가 사용한 curry 함수와 reduce 함수입니다
join 함수를 다음과같이 선언하고
다음 a라는 제너레이터를 생성해서 join함수를 실행시키면 똑같이 [Function (anonymous)] 가 출력됩니다. 제가 놓치고 있는 부분이 있을까요?