我正在查看Ramda的cond
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
函数捕获条件"否则"功能,以便返回默认值?
答案 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
),其作用类似于列表的其他部分。