2017-10-27 6 views
0

다음 코드 포인트를 무료로 만들 수있는 방법에 대해 머리를 감쌀 수 없습니다. 다음은 작동하지만 불필요한 중간 상태 변수가 필요합니다.파이프 내부에 포인트가없는 부분 적용?

import { pipe, curryN, __, prop } from 'Ramda' 
import ns from 'ns' 

// For the sake of this, let's say `ns.foo` is just `console.log` 
// (it can take any number of args) 

const bar = pipe(
    prop('foo'), 
    curryN(3), 
    (x) => x(__, 'b', __), 
    Promise.promisify, // or something 
)(ns) 

bar('a', 'c') 
// => 'a b c' 

Here's a contrived version on the Ramda repl.

+0

코드에 * state * 변수가 표시되지 않습니까? – Bergi

+0

'(x) => x (__, 'b', __), 익명 함수'x'는'curryN (3)'이 제거하려고하는 것 이후입니다. – rjhilgefort

답변

0

는 어쩌면 난 그냥 혼란 스러워요, 그러나 이것은 단순한 curryfoo 주위 같습니다 부분적으로 R.apply의 이성을 상실 인스턴스를 사용하는 것입니다 점없는 형태로 (x) => x(__, 'b', __)를 얻을 수

const foo = curry(function(a, b, c) { 
    console.log(a, b, c) 
}) 

const bar = foo(__, 'b') 
+0

위의 예는 실제 사례입니다. 실제로 파이프 라인이 더 많습니다. 나는 또한 다른 라이브러리의 기존 함수로 작업 중이며 더 멋진 인터페이스를 만들기를 목표로하고있다. (그래서 나는 재정의 할 수없고 파이프 라인에서 무언가를하려고하는 기존의'foo'를 가지고있다.) 이러한 제한 사항을 반영하기 위해 여기에서 스 니펫을 업데이트했습니다. – rjhilgefort

1

한 가지 방법 인수 목록과 함께 적용됩니다.

R.flip(R.apply)([R.__, 'b']) 

그러나 나는 지점이없는 솔루션을 찾고 그래서 항상 명심이 원래 익명 함수에 비해 가독성을 잃고 시작 생각합니다.

+0

나는'적용하기 '를 찾고 있었지만 그것을 뒤집어 쓰는 일은 내게 일어나지 않았다. 나는 그것이 의도를 모호하게하기 시작하고 독자가 그 줄에 더 길게 (아마) 매달리게한다는데 동의한다. 답변 해주셔서 감사합니다! 이 질문을 좀 더 길게 남겨두고 다른 FP 닌자가 나에게 빛을 보여줄 수 있는지 알아 보겠습니다. – rjhilgefort