KCh*_*oux 0 syntax scala pattern-matching
在Scala玩游戏时,我遇到了一些我认为应该可行的事情,但我不知道该怎么办.
我正在返回一个由给定的最小值/最大值限制的值.使用if-else语句,函数将如下所示:
def set(n: Int, min: Int, max: Int): Int =
{
if (n < min) return min
if (n > max) return max
return n
}
Run Code Online (Sandbox Code Playgroud)
我想知道是否可以通过模式匹配来实现(优雅).我尝试了以下,但它在语法上是不正确的:
def set(n: Int, min: Int, max: Int): Int = n match
{
case (n < min) => min
case (n > max) => max
case _ => n
}
Run Code Online (Sandbox Code Playgroud)
我认为有一种方法可以通过混合case和if语句来实现,但是当我完成它时,我可能只是使用标准的if/else链.是否有正确的语法来做我正在尝试的事情?
Rex*_*err 10
模式匹配有效,但不太优雅:
def set(n: Int, min: Int, max: Int) = n match {
case _ if n < min => min
case _ if n > max => max
case _ => n
}
Run Code Online (Sandbox Code Playgroud)
因为:
def set(n: Int, min: Int, max: Int) = if (n < min) min else if (n > max) max else n
Run Code Online (Sandbox Code Playgroud)
(或者如果你喜欢换行符:
def set(n: Int, min: Int, max: Int) = {
if (n < min) min
else if (n > max) max
else n
}
Run Code Online (Sandbox Code Playgroud)
)
不需要返回.
(别忘math.min(max,math.max(min,n))了.)