2013-09-25 7 views
3

Мне не удалось найти способ предоставить пустой (не op) способ завершить блок catch в следующем коде Scala:В Scala 2.10 или новее, как один «пуст» блокирует блокировку

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, указав различные формы «типа несоответствия, найдено : Unit, required: AutoCloseable =>? ".

Я также попытался изменить окончательную линию ниже, но по-прежнему получать такое же предупреждение, как и выше:

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

Любые конкретные указания по этому вопросу будет весьма признателен. И я знаю о библиотеке ARM. На данный момент, пожалуйста, предположите, что я не могу использовать его и нуждаюсь в резолюции, сформулированной в этой конкретной проблеме. Спасибо.

+0

Возможно ли, что ошибка была вызвана использованием 'map' вместо' foreach'? То есть, «карта» изо всех сил пыталась найти тип члена для нового списка. –

+0

Когда я изменил его на foreach, ошибка осталась. Это не делает ваши предположения неверными. Это просто, что foreach имел ту же проблему, что и карта. Ответ Блейка, совершенно очевидный, увидев его, был тем, что мне нужно. – chaotic3quilibrium

ответ

8
import scala.util.Try 

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

Очень приятно. Tyvm! Итак, почему требуется «a =>» вместо синтаксиса подчеркивания? Я попытался использовать синтаксис подчёркивания, и я получаю сообщение об ошибке: «Отсутствует тип параметра для расширенной функции ((x $ 8) => x $ 8.close)» – chaotic3quilibrium

+1

Мех, я продолжаю думать, что вы можете использовать «Ничего» в Scala, поскольку вы можете использовать '_' (внизу) в Haskell. Однако в Scala 'Nothing' есть тип без каких-либо экземпляров, поэтому вы не можете его вернуть. – WeaponsGrade

+3

Зачем использовать 'map()' вместо 'foreach()'? Нет нужды возвращать. – WeaponsGrade

Смежные вопросы