collectFirst: Применение частичной функции с несколькими предложениями case

#scala #partialfunction

Вопрос:

Поэтому я определил частичную функцию, которая будет использоваться для метода collectFirst в коллекции:

 myList.collectFirst{
  case A(_,_,_) => ....
  case B(_,_,_) => ....
  case C(_,_,_) => ....
}
 

Если myList содержит все A,B,C, то какое дело будет выполнено?

Комментарии:

1. Частичная функция совпадает с порядком сверху вниз и останавливается при первом совпадении.

Ответ №1:

Документация для collectFirst указанных ниже:

Находит первый элемент коллекции, для которого определена данная частичная функция, и применяет к нему частичную функцию.

Давайте предположим val myList = List(A(...), B(...), C(...)) . В таком случае case A(_, _, _) будет выполнено. Если у нас есть val myList = List(B(...), A(...), C(...)) , то второй случай будет выполнен, потому B(...) что первый элемент удовлетворяет частичному выполнению.