2011-12-21 50 views
1
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等的文檔。寫這個更簡潔的方法嗎?需要檢查,如果一個數字是在0

類似total_breaks.min(0)的東西。如果顯示0,如果不顯示total_breaks,則顯示0。

也就是有沒有辦法做這樣的事情

(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 _ =>?這是後備嗎?

+2

爲什麼不'if'? – delnan 2011-12-21 18:33:37

+0

你是正確的'情況下,我=>'會拿起所有剩餘的情況下,利用輸入值作爲'i'。 – 2011-12-21 18:37:15

回答

9

GenTraversableOnce中定義了minmax的方法,因此可用於序列。您可以使用它們爲:

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

還有minRichInt定義max,就像在任何運營商的工作,可以轉化爲RichInt,通常你的香草整數:

scala> -4 min 0 
resN: -4 

所以,如果如果x大於00,那麼您可以編寫:

scala> x max 0 

這意味着你可以重寫你的模式匹配爲:

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

關於第二個問題,_i都是有效的模式,將匹配任何東西。不同的是,在第一種情況下,您不會將您已匹配的內容綁定到變量。使用println(_)是錯誤的,雖然,因此,它對應於打印其第一個參數的匿名函數。所以,如果你不想重複表達(4 + 5),你的確應該寫你的模式,代碼:

case i => println(i) 
+0

謝謝。所以,而不是分鐘,我不得不使用最大值。去搞清楚。吉茲 – 2011-12-21 18:43:04

+0

還有'math.min(INT,INT)'。 – ziggystar 2011-12-21 19:26:01

相關問題