调用collectFirst时多case分句偏函数的分支匹配优先级问题
Scala
collectFirst 方法匹配逻辑解答 问题描述:我定义了一个偏函数用于集合的collectFirst方法,代码如下:
myList.collectFirst{ case A(_,_,_) => .... case B(_,_,_) => .... case C(_,_,_) => .... }如果myList中同时存在A、B、C三类元素,请问上述代码会执行哪个case分支的逻辑?
具体执行哪个case分支,完全取决于myList的元素存储顺序:
collectFirst会按照集合的从左到右遍历顺序逐个检查元素,找到第一个可以匹配偏函数中任意case的元素后,就会执行该元素命中的case逻辑,直接返回结果,不会再检查后续元素,也不会触发其他case。
举个实际示例:
如果myList的元素顺序为 List(B(1,2,3), A(4,5,6), C(7,8,9)),第一个元素是B类型,那么只会执行case B(_,_,_) =>对应的逻辑,后面的A、C元素和对应case都不会生效。
额外说明:如果存在类型继承关系导致单个元素可以匹配多个case(比如A是B的父类),才会按照case的编写顺序从上到下匹配,优先触发第一个命中的case。
内容的提问来源于stack exchange,提问作者Mandroid
相关产品推荐
相关产品推荐

