Вы, кажется, пытаетесь использовать оговорку охраны , и вы можете посмотреть на a tutorial on match statements.
Однако, то, что вы делаете, вовсе не требует утверждения соответствия.
list.map(x => math.max(1, x.length))
Или, если max
не существует, и мы не хотели называть x.length
дважды, мы могли бы назначить переменную:
list.map{ x =>
val len = x.length
if (len > 1) len else 1
}
Или мы можем использовать оператор матча, либо с оговорка охранник или голый:
list.map(_.length match { case x if x > 1 => x; case _ => 1 })
list.map(_.length match { case x => if (x > 1) x else 1 })
Обратите внимание, что _
является не переменная. Вы не можете использовать его повторно. Это означает, что «игнорируйте это», «сделайте это функцией», «введите любую следующую переменную». Если вам нужна переменная, на которую вы можете ссылаться повторно, вы должны ее назвать (например, x
).
Следует также отметить, что else
является не a «если нет» альтернатива case
заявлений. Если вы хотите использовать команду catch-whatever-остатки по умолчанию (и вы должны!), Используйте case _ =>
.
Каковы ваши 3 подстановочные знаки ('_'), которые должны быть? Тот же параметр? 3 разных параметра? Почему вы используете 'match' вместо' if', если у вас есть только две возможности, и вы не соответствуете шаблонам? –
Возможно, если бы вы могли написать код, который вы хотите в полной функции, будет более понятным, что вы хотите сделать лямбда. –