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)
你不能在一次比较中做到这一点。您需要使用:
(d > 0) && (d <= 7)
Run Code Online (Sandbox Code Playgroud)
正如您所做的那样,它将评估一个与布尔值的比较,然后在第二次比较中无法将其用作 int。
\n\n
您可以执行以下任一操作:
\n\nval f = (n: Int) \xe2\x87\x92 if (n > 0 && n <= 7) n + 5 else nRun Code Online (Sandbox Code Playgroud)\n\n// 或者 ...
\n\ndef f(n: Int) = if (n > 0 && n <= 7) n + 5 else nRun Code Online (Sandbox Code Playgroud)\n\n// 或者 ...
\n\ndef 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\ndef 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