Him*_*mel 2 javascript functional-programming ramda.js
我正在查看该函数的Ramda文档,但对其行为感到困惑。文档指出...condcond
返回一个函数 fn,它封装了 if/else-if/else 逻辑。R.cond 采用 [predicate, transform] 对列表。fn 的所有参数依次应用于每个谓词,直到返回一个“真实”值,此时 fn 返回将其参数应用于相应转换器的结果。如果没有任何谓词匹配,则 fn 返回 undefined。
这是给出的示例:
var fn = R.cond([
[R.equals(0), R.always('water freezes at 0°C')],
[R.equals(100), R.always('water boils at 100°C')],
[R.T, temp => 'nothing special happens at ' + temp + '°C']
]);
fn(0); //=> 'water freezes at 0°C'
fn(50); //=> 'nothing special happens at 50°C'
fn(100); //=> 'water boils at 100°C'
Run Code Online (Sandbox Code Playgroud)
我了解[predicate, transform]函数的方面,但我不清楚“else”部分是如何工作的。在典型的 if/else-if/else 语句中,“else”部分不接受谓词。但是,在示例中,每个数组都有一个谓词。也许知道R.T在这种情况下如何运作会有所帮助,但在T文档中搜索是徒劳的。
如何使用 Ramda 的cond函数来捕获条件“else”功能以返回默认值?
R.T总是返回true并忽略传递给它的任何参数。这就是100你传入的被忽略的原因,它刚刚返回true。
R.cond搜索每一[predicate, transform]对,并停止搜索计算结果为 的第一个谓词true。因此,[predicate, transform]将评估该对中的第一个匹配实体。
如果没有true,则它到达末尾并执行R.T谓词(始终为true),其作用类似于列表的 else 部分。
| 归档时间: |
|
| 查看次数: |
3307 次 |
| 最近记录: |