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

时间:2011-12-21 18:21:24

标签: 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)
}

我在想Scala中有一个可以缩短它的功能。我以为min这样做但我猜不是。我似乎无法在minmax

上找到文档

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?
}

如果我case i => println(i)case _ =>相同?这是后备吗?

1 个答案:

答案 0 :(得分:9)

GenTraversableOnce中定义了minmax方法,因此可用于序列。您可以将它们用作:

scala> List(1, -4, 0).min
resN: -4

RichInt中定义了minmax,它们可以像任何可以转换为RichInt的运算符一样工作,通常是你的整数:

scala> -4 min 0
resN: -4

因此,如果您想要一些可以返回您的号码的内容,请x如果x大于0而另外0,则可以写下:

scala> x max 0

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

chartTemplate.setAttribute("totalBreaks", total_breaks max 0)

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

case i => println(i)