2013-09-25 23 views
3

我一直無法找到一種方法來提供一個空(無操作)的方式來完成下面的Scala代碼中的catch塊:在Scala 2.10或更高版本中,如何提供一個「空」catch塊

var autoCloseables: List[AutoCloseable] = List() 
... //some code that fills the list with various java.sql.* instances; Connection, Statement, ResultSet 
autoCloseables.map(try {_.close} catch {case se: SQLException => NoOp}) 

我試圖取代「NoOp」與「()」,「Unit」,「None」,「se.getMessage()」等我繼續接受在Eclipse中陳述各種形式的「類型不匹配的錯誤;發現:單位,必需:AutoCloseable =>?「。

我也試圖改變最終線以下,但仍然得到同樣的警告如上:

autoCloseables.map(try {_.close} catch {case _: Throwable => }) 

任何具體指導,這將不勝感激。而且,我瞭解ARM庫。現在,請假設我無法使用它,需要從這個特定問題形成框架的解決方案。謝謝。

+0

是否有可能錯誤是由'map'而不是'foreach'觸發的?也就是說,'map'正在努力尋找新列表的成員類型。 –

+0

當我將其更改爲foreach時,錯誤仍然存​​在。這不會使你的猜測不正確。只是這個foreach和map有同樣的問題。布萊克的回答在看完後顯得十分明顯,正是我所需要的。 – chaotic3quilibrium

回答

8
import scala.util.Try 

autoCloseables.map(a => Try(a.close)) 
+1

非常好。 Tyvm!那麼,爲什麼需要「a =>」而不是下劃線語法呢?我嘗試使用下劃線的語法,我收到一個錯誤:「缺少擴展函數的參數類型((x $ 8)=> x $ 8.close)」 – chaotic3quilibrium

+1

呃,我一直認爲你可以在Scala中使用'Nothing' Haskell中的'_'(底部)。然而,在Scala中'Nothing'是沒有任何實例的類型,所以你不能返回它。 – WeaponsGrade

+3

爲什麼使用'map()'而不是'foreach()'?沒有想要的回報價值。 – WeaponsGrade

相關問題