2012-12-19 3 views
4

Я хотел бы сделать следующее соответствие шаблону:Scala модель не соответствующий вариант None или без привязки

minReachableInt match { 
    case None | Some(n) if n <= 0 => 
    println("All positive numbers can be reached") 
    case _ => 
    println("Not all positive numbers can be reached") 
} 

Конечно, он не компилируется, потому что п не соответствует в None. Но поскольку мне это не нужно в последующем коде, как я могу достичь своего результата, не дублируя код, самым красивым способом вы могли бы представить?

ответ

10

Существуют ограничения на то, что вы можете сделать с синтаксисом сопоставления шаблонов, поэтому не пытайтесь использовать его для выражения всей вашей логики.

Эта проблема может быть выражена с помощью filter:

minReachableInt filter (_ <= 0) match { 
    case None => 
    println("All positive numbers can be reached") 
    case _ => 
    println("Not all positive numbers can be reached") 
} 
Смежные вопросы