我的函数的目的是在整数上加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;
任何提示?
答案 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
}