Как использовать оператор OR в предикате фильтра при использовании _._ 2 в scala - PullRequest
1 голос
/ 16 апреля 2020

У меня есть код ниже, который фильтрует кортеж, проверяя, совпадает ли 2-й элемент (порядковый номер) с другой переменной.

statements.zipWithIndex.filterNot(_._2 == StatementsIntoTuples(statements).indexWhere(_.equalsIgnoreCase("PUSHPOP")) map {
 case (statement,_) => statement }

Я пытаюсь использовать оператор ИЛИ для фильтрации по второму условию, как показано ниже (1 - только пример)

statements.zipWithIndex.filterNot(_._2 == StatementsIntoTuples(statements).indexWhere(_.equalsIgnoreCase("PUSHPOP")) || _._2 == 1  )map {
     case (statement,_) => statement
   }

, но выдает ошибку отсутствует тип параметра. Я знаком, когда речь идет об одном элементе, в отличие от кортежа ie, который использовал приведенный ниже код в моем коде и работает нормально. Но я думаю, что, вероятно, я делаю что-то не так и неправильно понимаю, используя _._2.

statements.filterNot(x => x.toString().contains("NOP") && x.isUnlabelled)

1 Ответ

2 голосов
/ 16 апреля 2020

Это потому, что вы использовали подчеркивание дважды. Последовательные подчеркивания относятся к последовательным параметрам лямбды, у вас есть только один. Вам нужно написать это в более явной форме:

statements.zipWithIndex
  .filterNot { case(_, index) => index == StatementsIntoTuples(statements).indexWhere(_.equalsIgnoreCase("PUSHPOP")) || index == 1  }
  .map { case(statement, _) => statement}
...