slice 함수는 go 나 pipe 에 어떻게 연결 시킬 수 있나요?
Jun4928 opened this issue · 3 comments
Jun4928 commented
아래와 같은 코드가 있습니다.
현재 코드
const { go, map, extend, sortByDesc, range, slice } = require('fxjs')
const L = require('fxjs/Lazy'
const plain = go(
range(10000),
map((a) => extend(a, { age: a + 1 })),
sortByDesc(({ age }) => age),
)
console.log(slice(0, 50, plain))
원하는 바
위 코드에서 slice
도 go
함수 안에 넣어서 다음과 같이 표현하고 싶은데요,
const plain = go(
range(10000),
map((a) => extend(a, { age: a + 1 })),
sortByDesc(({ age }) => age),
slice(0, 50)
)
다음과 같은 에러 메시지를 만납니다.
TypeError: Invalid attempt to iterate non-iterable instance.
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.
at _createForOfIteratorHelper (/Users/jun.choi/dev/fx/node_modules/fxjs/cjs/Lazy/sliceL.js:29:476)
at sliceL$ (/Users/jun.choi/dev/fx/node_modules/fxjs/cjs/Lazy/sliceL.js:43:23)
제가 예상하기로는 sliceL 을 감싸고 있는 curry 함수가 인자 하나만 저장(?) 할 수 있도록 설계 되어 있는 것 같은데,
slice 함수의 경우는 위와 같이 파이프 라인으로 표현 할 수 없는 것 인가요?
Jun4928 commented
유인동 님께서 답변 달아주신 reduce 함수 사용 관련 문의 이슈
보고 다음과 같이 코드를 작성했습니다.
const plain = go(
range(10000),
map((a) => extend(a, { age: a + 1 })),
sortByDesc(({ age }) => age),
(_) => slice(0, 50, _),
)
console.log(plain)
Jun4928 commented
다음과 같이 curryN 함수를 사용하면 두개의 인자까지 커링 할 수 있네요!
const { ..., curryN } = require('fxjs')
const slice2 = curryN(2, slice)
const plain = go(
range(10000),
map((a) => extend(a, { age: a + 1 })),
sortByDesc(({ age }) => age),
slice2(0, 50),
)
Einere commented
go
함수의 인자로 받는 함수는 기본적으로 인자를 1개 받는 함수들이라는, go
함수의 기본적인 동작 방식을 이해하고 있지 않으면 애먹기 쉽죠..
레퍼런스에 사용법에 대한 설명이 첨부되어 있으면 좋았을텐데 말이져.. 🥺
덕분에 저도 이슈 해결하였습니다. 👏
참고로, 레퍼런스엔 없지만 curry2
함수를 이용하면 다음과 같이 사용하실 수 있어요.
import {go, slice, curry2} from 'fxjs';
const _slice = curry2(slice);
go(
someList,
_slice(start, end),
...
);