2017-03-16 21 views
1

這顯然不起作用 - 因爲always不與whenTrueValue一起調用,就像它在whenPropTrueAlways的頂級實現中所做的那樣。有沒有辦法調用另一種方法,像我試圖做的?用特定的值代替參數,並將函數應用於另一個參數?Ramda的部分應用參數操作

export const whenPropEq = curry((key, predicateValue, whenTrueFn, data) => 
    when(
    propEq(key, predicateValue), 
    whenTrueFn, 
)(data), 
); 

const whenPropTrueAlways = curry((key, whenTrueValue, data) => 
    whenPropEq(key, true, always(whenTrueValue), data), 
); 

// Doesn't work, for obvious reasons- just trying to illustrate the desire 
const whenPropTrueAlways = whenPropEq(__, true, always(__), __); 

在此先感謝您的幫助。

回答

2

它不漂亮,但你可以這樣寫:

const whenPropTrue = useWith(flip(whenPropEq)(true), [identity, always, identity]); 

useWith是更不尋常的Ramda功能之一(與它的姐妹函數converge一起)它可以幫助一個讓自由點,東西,否則可能難以做到。但是,我經常發現,當難以讓事情變得毫無意義時,這是一個人不應該這麼做的標誌。

+0

感謝您的迴應!我承認我沒有熟悉'useWith'或'converge'-我會深入研究它們。因此,在這種特殊情況下,您是否說您不打算嘗試使部分應用程序方法免費? – rjhilgefort

+1

我不知道。這不是我的電話。我認爲你需要問自己,看看這樣一個無點解決方案和最初指出的解決方案,你(或其他維護你的代碼的人)在離開它一年後重新開放它時會更好地理解哪一個。 –

+0

再次感謝您的幫助! – rjhilgefort