Scala 模式与函数匹配

Scala 模式与函数匹配,scala,syntax,pattern-matching,Scala,Syntax,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 } def集合(n:Int,min:Int,max:Int):Int= { 如果(nmax)返回max 返回n }

在Scala玩的时候,我遇到了一些我认为可能的事情,但我不知道怎么做

我返回一个以给定的最小值/最大值为界的值。使用if-else语句,函数如下所示:

def set(n: Int, min: Int, max: Int): Int = 
{
  if (n < min) return min
  if (n > max) return max
  return n
}
def集合(n:Int,min:Int,max:Int):Int=
{
如果(nmax)返回max
返回n
}
我想知道是否可以通过模式匹配(优雅地)做到这一点。我尝试了以下方法,但在语法上不正确:

def set(n: Int, min: Int, max: Int): Int = n match 
{
  case (n < min) => min
  case (n > max) => max
  case _ => n
}
def集合(n:Int,min:Int,max:Int):Int=n匹配
{
案例(nmin
案例(n>max)=>max
大小写=>n
}

我认为有一种方法可以通过混合case和if语句来实现,但是当我这样做的时候,我还不如使用一个标准的if/else链。是否有正确的语法来执行我正在尝试的操作

模式匹配有效,但不太优雅:

def set(n: Int, min: Int, max: Int) = n match {
  case _ if n < min => min
  case _ if n > max => max
  case _ => n
}
def集(n:Int,min:Int,max:Int)=n匹配{
如果nmin
案例uu如果n>max=>max
大小写=>n
}
因为:

def set(n: Int, min: Int, max: Int) = if (n < min) min else if (n > max) max else n
def set(n:Int,min:Int,max:Int)=如果(nmax)最大其他n
(或者,如果您喜欢换行符:

def set(n: Int, min: Int, max: Int) = {
  if (n < min) min
  else if (n > max) max
  else n
}
def设置(n:Int,min:Int,max:Int)={
如果(nmax)max
其他
}
)

不需要返回


(也不要忘记
math.min(max,math.max(min,n))

使用返回表达式,您正在思考/编程命令式术语。如果发生
,则返回
。 在Scala中,if是类型化表达式:

val x = if (cond) v1 else v2
其中x将是最具体的类型,即v1和v2的超类型

因此,您可以将表达式写成:

def bound(n:Int, max:Int, min:Int) = if (n < min) min else if (n>max) max else n
def-bound(n:Int,max:Int,min:Int)=if(nmax)max-else n

即使可以使用卫士完成,在这种情况下,我也看不到使用match语句的价值。

def set(…)声明为type Unit,但返回一个值。我猜你想把它设置成(…):Int?@maasg-Oops,当时没想到。固定的。但问题仍然存在。这是我有点害怕的,但有一个可靠的答案是很好的。