嗯,首先,我不明白你的功能。 R.cond([ [R.T, R.identity] ])
是寫一些本質上是身份函數的一種有點奇怪的方式。 cond
通常需要多個謂語動作對,通常使用謂詞R.T
最後一個作爲默認(類似於default
情況下switch
聲明。)
在(a) => R.cond([ [R.T, R.identity] ])
結束語這件事只是給你一個功能,您通過你喜歡的任何參數,這些參數被及時忽略,從而回饋那個奇怪的身份函數。
像由Ramda創造了許多功能,的cond
輸出是令行禁止功能,採用Ramda的擴大鑽營的概念,在其中您可以調用的函數以不同的方式。例如,如果g = curry(function f(a, b, c) {/* ... */})
,那麼所有的這些都相當於f(a, b, c)
:
g(a, b, c)
g(a, b)(c)
g(a)(b, c)
g(a)(b)(c)
如果你比參數的全套少打電話,你回來的另一個功能:
g(a); //~> curry((b, c) => f(a, b, c))
g(a, b); //~> curry((c) => f(a, b, c))
這擴展甚至根本沒有提供任何參數:
g(); //~> curry((a, b, c) => f(a, b, c)),
這最後是你注意到的。 t1(1)
返回奇數標識,R.cond([ [R.T, R.identity] ])
。因爲這個函數是curried的,所以如果你沒有參數調用它,你會得到一些等同於同一個身份函數的東西。
這應該解釋爲什麼函數的行爲與它一樣。我不知道你想解決什麼根本問題,所以我不知道如何幫助...
除了你提到的違約,並可能拉姆達的defaultTo
可能有所幫助。
@cubrr謝謝,只是修正了錯字 – tinlyx