整数范围的模式匹配

时间:2013-01-13 20:31:00

标签: scala pattern-matching

我的函数的目的是在整数上加5,只要该整数大于0且小于或等于7.我试试:

val add5Partial : PartialFunction[Int, Int] = {
  case d if (0 < d <= 7) => d + 5;
} 

我明白了:

<console>:8: error: type mismatch;
 found   : Int(7)
 required: Boolean
         case d if (0 < d <= 7) => d + 5;

任何提示?

3 个答案:

答案 0 :(得分:17)

Scala不支持开箱即用的语法,所以你必须写:

val partial : Int => Int = {
  case d if (d > 0) && (d <= 7) => d + 5;
} 

或者你可以这样做:

val partial : Int => Int = {
  case d if 1 to 7 contains d => d + 5;
} 

答案 1 :(得分:4)

你不能在一次比较中做到这一点。你需要使用:

(d > 0) && (d <= 7)

正如您所做的那样,它将评估一个与布尔值的比较,然后在第二个比较中将其用作int。

答案 2 :(得分:2)

您可以执行以下任何操作:

val f = (n: Int) ⇒ if (n > 0 && n <= 7) n + 5 else n

//或......

def f(n: Int) = if (n > 0 && n <= 7) n + 5 else n

//或......

def f(n: Int): Int = n match {
    case n if n > 0 && n <= 7 ⇒ n + 5
    case _ ⇒ n
}

//或(谈到...... @ om-nom-nom的评论)

def f(n: Int) = n match {
    case n if 0 to 7 contains n ⇒ n + 5
    case _ ⇒ n
}