Ramda`cond` else声明

时间:2016-07-01 17:19:52

标签: javascript functional-programming ramda.js

我正在查看Ramdacond function文档,并对其行为感到困惑。文档声明cond ...

  

返回一个函数fn,它封装if / else-if / else逻辑。   R.cond获取[谓词,变换]对的列表。全部   fn的参数依次应用于每个谓词   一个人回归" truthy"值,此时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'

我理解该功能的[predicate, transform]方面,但我并不清楚" else"部分工作。在典型的if / else-if / else语句中," else"部分不接受谓词。但是,在该示例中,每个数组都有一个谓词。也许知道R.T在这种情况下的运作方式会有所帮助,但在文档中搜索T却毫无结果。

如何使用Ramda的cond函数捕获条件"否则"功能,以便返回默认值?

1 个答案:

答案 0 :(得分:4)

nameArr = [[NSMutableArray alloc] init]; countryArr = [[NSMutableArray alloc] init]; 始终返回R.T并忽略传递给它的所有参数。 这就是您传入的true被忽略的原因,它刚刚返回100

true搜索每个R.cond对,并停止搜索评估为[predicate, transform]的第一个谓词。 因此,将评估true对中的第一个匹配实体。

如果没有[predicate, transform],则它到达结尾并执行true谓词(始终为R.T),其作用类似于列表的其他部分。