-
카테고리
-
세부 분야
프로그래밍 언어
-
해결 여부
해결됨
join에 대한 내용이 궁금증이 해결되지 않아서 질문드립니다!
23.07.10 14:01 작성 조회수 271
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())) 로 했을 때에도 기본 파라미터를 활용할 수 있는 방법이 궁금합니다..!
답변을 작성해보세요.
1
0
인프런 AI 인턴
2023.07.12
안녕하세요, 인프런 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
을 출력합니다.
자세한 내용은 강의에서 다루는 내용과 관련이 있는데요, 강의를 들으시면 더 자세한 정보를 얻을 수 있을 것입니다.
그럼 궁금한 점이 해결되었으면 좋겠네요. 추가로 질문이 있다면 언제든지 물어보세요. 좋은 하루 되세요!
projectkmscom
질문자2023.07.14
함수형 프로그래밍에 대한 이해가 부족한건지.... 너무 여럽네요ㅠ
제가 사용한 curry 함수와 reduce 함수입니다
const curry =
(f) =>
(a, ..._) =>
_.length ? f(a, ..._) : (..._) => f(a, ..._);
const reduce = curry((func, acc, iter) => {
if (!iter) {
iter = acc[Symbol.iterator]();
acc = iter.next().value;
}
for (const i of iter) {
acc = func(acc, i);
}
return acc;
});
join 함수를 다음과같이 선언하고
const join = curry((seperator = ",", iter) => {
if (typeof iter === "function") {
iter = iter();
}
return reduce((a, b) => `${a}${seperator}${b}`, iter);
});
다음 a라는 제너레이터를 생성해서 join함수를 실행시키면 똑같이 [Function (anonymous)] 가 출력됩니다. 제가 놓치고 있는 부분이 있을까요?
function* a() {
yield 10;
yield 20;
yield 30;
yield 40;
yield 50;
}
log(join(a())) //[Function (anonymous)]
답변 2