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
这样做但我猜不是。我似乎无法在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?
}
如果我case i => println(i)
与case _ =>
相同?这是后备吗?
答案 0 :(得分:9)
GenTraversableOnce
中定义了min
和max
方法,因此可用于序列。您可以将它们用作:
scala> List(1, -4, 0).min
resN: -4
在RichInt
中定义了min
和max
,它们可以像任何可以转换为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)