5

我的函数的目的是将 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;

有小费吗?

4

3 回答 3

19

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;
} 
于 2013-01-13T20:33:34.160 回答
5

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

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

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

于 2013-01-13T20:33:23.177 回答
3

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

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
}
于 2016-07-15T00:46:37.060 回答