整数范围的模式匹配

dub*_*ech 4 scala pattern-matching

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

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

我明白了:

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

有小费吗?

om-*_*nom 17

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

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

或者你可以这样做:

val partial : Int => Int = {
  case d if 1 to 7 contains d => d + 5;
} 
Run Code Online (Sandbox Code Playgroud)


Dav*_*d M 5

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

(d > 0) && (d <= 7)
Run Code Online (Sandbox Code Playgroud)

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


pes*_*669 5

\n\n

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

\n\n
val f = (n: Int) \xe2\x87\x92 if (n > 0 && n <= 7) n + 5 else n
Run Code Online (Sandbox Code Playgroud)\n\n

// 或者 ...

\n\n
def f(n: Int) = if (n > 0 && n <= 7) n + 5 else n
Run Code Online (Sandbox Code Playgroud)\n\n

// 或者 ...

\n\n
def f(n: Int): Int = n match {\n    case n if n > 0 && n <= 7 \xe2\x87\x92 n + 5\n    case _ \xe2\x87\x92 n\n}
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
def f(n: Int) = n match {\n    case n if 0 to 7 contains n \xe2\x87\x92 n + 5\n    case _ \xe2\x87\x92 n\n}
Run Code Online (Sandbox Code Playgroud)\n