Scala 整数范围的模式匹配

Scala 整数范围的模式匹配,scala,pattern-matching,Scala,Pattern Matching,我的函数的目的是在一个整数上加5,只要该整数大于0且小于或等于7。我尝试: val add5Partial : PartialFunction[Int, Int] = { case d if (0 < d <= 7) => d + 5; } val add5部分:部分函数[Int,Int]={ 病例d如果(00&&n0&&n0&&nom-nom-nom有答案。据我所知,没有一种通用的现代编程语言允许使用您使用的那种速记符号。还要注意的是,在Scala中,您不需要保护表达

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

val add5Partial : PartialFunction[Int, Int] = {
  case d if (0 < d <= 7) => d + 5;
} 
val add5部分:部分函数[Int,Int]={
病例d如果(0
我得到:

<console>:8: error: type mismatch;
 found   : Int(7)
 required: Boolean
         case d if (0 < d <= 7) => d + 5;
:8:错误:类型不匹配;
发现:Int(7)
必填项:布尔值
病例d如果(0

有任何提示吗?

您不能在一次比较中完成此操作。您需要使用:

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

(d>0)和&(dScala不支持这种开箱即用的语法,因此您必须编写:

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

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


valf=(n:Int)⇒ 如果(n>0&&n0&&n0&&nom-nom-nom有答案。据我所知,没有一种通用的现代编程语言允许使用您使用的那种速记符号。还要注意的是,在Scala中,您不需要保护表达式周围最外层的括号和分号都是非常糟糕的样式!而且,当您e使用上下文绑定语法。@RandallSchulz python可以做到这一点。事实上,我看到scala邮件列表中的某些人也使用scala完成了这一操作,但使用了一些额外的技巧。现在找不到。重复的。
val partial : Int => Int = {
  case d if 1 to 7 contains d => d + 5;
}