lodash 흐름 기능은 실제 작성 기능입니까, 아니면 하나처럼 보이지만 빠르게 실행되도록 최적화되어 있고 내가 기대했던 유연성을 희생합니까? 나는 흐름이 카레가 될 수있는 함수를 리턴 할 것으로 기대했지만 대신 Javascript의 arguments 키워드를 사용하는 함수를 돌려 주었다. 따라서 카레는 보류중인 인자가 있다는 것을 알 수 없으며 즉시 호출됩니다.흐름에 의해 반환 된 함수에서 lodash 카레가 작동하지 않습니다. FP 용 로다시 FP?
직관적으로 충분히 사용 :
var add = function(x, y) { return x + y }; var exclam = function(x) { return x.toString() + "!"; } exclam(1) // "1!" add(1,2) // 3 var add1 = FP.curry(add)(1); add1(4) // 5 var add1AndExclam = FP.flow([add1, exclam]) add1AndExclam(2) // "3!"
비 직관적 결과 :
addAndExclam = FP.flow([add, exclam]) // function(){var t=arguments,e=t[0];if(i&&1==t.length&&yi(e)&&e.length>=200)return i.plant(e).value();for(var u=0,t=r?n[u].apply(this,t):e;++u<r;)t=n[u].call(this,t);return t} addAndExclam(1,2) // "3!" add1AndExclamV2 = FP.curry(addAndExclam)(1) // "NaN!"
그것이 과잉 함수형 프로그래밍 패러다임에 도움이 또 다른 라이브러리를 찾을 수 있나요? 난 그냥 내 자신의 작곡을 채찍해야합니까? 이미 프로젝트에 있었기 때문에 lodash를 사용했습니다. 설명서는 흐름이 lodash의 구성이어야하는 것처럼 보입니다.
lodash의 데이터 인수를 카레로 처리하는 것이 정말 어렵다는 것을 알았습니다. (eachMyArrayName 바로 가기와 같은 것을 원했습니다.) curryRight 또는 lodash 객체 자리 표시 자 규칙을 사용하는지 여부.
lodash FP가 자동 curriable을 만들기 위해서입니까? 아니면 내가 뭔가 잘못하고 있으며, 그것은 주요 기능 프로그래밍 도우미로 사용할 수 있습니까?
편집 :
이 같은 기능을 래핑 할 수 있습니다에 내가 원하는하지만 보일러보고 코드를 가지고있는 메타 프로그래밍의 목적을 물리 칠 것 같으면. ramda 나에게 직관적이었을 것입니다 무엇을하는 것처럼
add1AndExclamV2 = FP.curry(function(x, y) { return addAndExclam(x, y) })(1) add1AndExclamV2(2) "3!"
정적 인 ty가 없기 때문에 카레가 매개 변수의 수를 말할 수 없습니다 pe 시스템을 자바 스크립트에서 사용하고 있으며 모든 기능은 가변적입니다. 함수의'.length' 속성은 단지 힌트 일 뿐이며 가변적 인, 깔끔하지 않은 함수를위한'compose' 함수에서 예상대로 설정하는 것은 쉽지 않습니다. Underscore/Lodash는 그렇지 않지만 Ramda는 이것을 통과합니다 (그러나 실패는 거의 없습니다). 'compose '는 미리 함수를 카레하면 예상대로 작동합니다. – Bergi