Javascript Ramda`cond`else语句

Javascript Ramda`cond`else语句,javascript,functional-programming,ramda.js,Javascript,Functional Programming,Ramda.js,我正在查看文档,对它的行为感到困惑。文件中说明,cond 返回一个函数fn,它封装if/else if/else逻辑。 R.cond获取[predicate,transform]对的列表。所有的 fn的参数依次应用于每个谓词,直到 返回一个“truthy”值,此时fn返回 将其参数应用于相应的转换器。如果没有 谓词匹配,fn返回未定义的 以下是给出的示例: var fn = R.cond([ [R.equals(0), R.always('water freezes at 0°C')],

我正在查看文档,对它的行为感到困惑。文件中说明,
cond

返回一个函数fn,它封装if/else if/else逻辑。 R.cond获取[predicate,transform]对的列表。所有的 fn的参数依次应用于每个谓词,直到 返回一个“truthy”值,此时fn返回 将其参数应用于相应的转换器。如果没有 谓词匹配,fn返回未定义的

以下是给出的示例:

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'
我理解函数的
[谓词,转换]
方面,但我不清楚“else”部分是如何工作的。在典型的if/else if/else语句中,“else”部分不接受谓词。但是,在本例中,每个数组都有一个谓词。也许知道
R.T
在这种情况下如何运作会有所帮助,但在文档中搜索
T
是徒劳的


如何使用Ramda的
cond
函数捕获条件“else”功能以返回默认值?

R.T
始终返回
true
,并忽略传递给它的任何参数。 这就是您传入的
100
被忽略的原因,它只是返回
true

R.cond
搜索每个
[谓词,转换]
对,并停止搜索计算结果为
真的第一个谓词。
因此,将计算
[谓词,转换]
对中的第一个匹配实体


如果没有任何内容是
true
,则它将到达末尾并执行
R.T
谓词(该谓词始终是
true
),其作用类似于列表的其他部分。

R.T
是一个始终返回
true
的函数,所以对于
R.cond
来说,它基本上等于(命令式语言的)典型switch子句中的
default
。也许看看帮助,它是相当小的。这可能会让它更清楚:。你看到的else案例只是另一个案例陈述。正是谓词,以及它位于最后一个位置的事实,使得它的行为像一个默认值。