写这个更简洁的方法?需要检查一个数字是否低于0

Dre*_*w H 1 scala

val total_breaks = //a random number

total_breaks match {
  case i if(i < 0) => chartTemplate.setAttribute("totalBreaks", 0)
  case _ => chartTemplate.setAttribute("totalBreaks", total_breaks)
}
Run Code Online (Sandbox Code Playgroud)

我在想Scala中有一个函数可以缩短它.我以为min这样做但我猜不是.我似乎无法找到文件min,max等等.

有点像total_breaks.min(0).如果不在0,则显示0如果不显示total_breaks.

也有办法做这样的事情

(4 + 5) match {
  case 0 => println("test")
  case _ => println(_) //i need to display the number passed into match?  Is this not  possible?
}
Run Code Online (Sandbox Code Playgroud)

如果我这样做case i => println(i)是一样的case _ =>?这是后备吗?

Phi*_*ppe 9

有方法minmax在其中定义GenTraversableOnce,因此可用于序列.您可以将它们用作:

scala> List(1, -4, 0).min
resN: -4
Run Code Online (Sandbox Code Playgroud)

也有minmax定义RichInt,就像任何运营商可以转换到工作RichInt,通常是您的香草整数:

scala> -4 min 0
resN: -4
Run Code Online (Sandbox Code Playgroud)

所以,如果你想要的东西,你返回号码,说x如果x大于00否则,你可以这样写:

scala> x max 0
Run Code Online (Sandbox Code Playgroud)

这意味着您可以将模式匹配重写为:

chartTemplate.setAttribute("totalBreaks", total_breaks max 0)
Run Code Online (Sandbox Code Playgroud)

关于第二个问题,_而且i都是有效的模式,将匹配任何东西.不同之处在于,在第一种情况下,您不会将与匹配的内容绑定到变量.但是使用println(_)是错误的; 因此,它对应于打印其第一个参数的匿名函数.因此,如果您不想重复表达式(4 + 5),您应该将您的模式和代码编写为:

case i => println(i)
Run Code Online (Sandbox Code Playgroud)