я ловлю себя на том, что повторяю простые блоки try/catch, которые должны, по IMO, состоять из 1 -строк.
Например, предположим, что мне нужно преобразовать дату строки uri в формате ггггммдд в время Joda -. Со стандартным блоком try/catch метод преобразования выглядит следующим образом::
def ymd2Date(ymd: Option[String]) = ymd match {
case Some(date) =>
try { Right( ymdFormat.parseDateTime(date) ) }
catch { case e =>
log.info(e.getMessage)
Left(None)
}
case None =>
Left(None) // no uri date param
}
val ymdFormat = DateTimeFormat.forPattern("yyyyMMdd")
Работает достаточно хорошо, цель ясна, но когда я выполняю этот вид регистрации try/catch для всех не-критических событий, тогда Я ищу способ высушить его. Поиск привел меня к этому сообщению SO о scala.util.control.Exception. Полезно, но все еще немного сложно заставить его работать так, как я хотел бы. На простом английском языке я просто хочу сказать: «поймай какое-нибудь -действие, получи -журнал результатов -тип ошибки -».
Итак, я взломал это, основываясь на части контроля. Исключение, которое меня интересует (или я понимаю, что оно полезно):
class Catcher[T](f: => T) {
type Logger = (=> Any) => Unit
def either[T]( logger: => Logger ) = {
try { Right(f) }
catch { case e =>
logger(e.getMessage)
Left(None)
}
}
}
def catching[T](f: => T) = new Catcher(f)
И затем использовать вместо try/catch вот так:
catching( ymdFormat.parseDateTime(date) ) either log.info
Можно добавить вариант, префикс msg и т. д., но... вероятно, было бы лучше найти способ получить контроль. Исключение для работы, как указано выше, поскольку команда TypeSafe собирается создавать кодовые миры лучше, чем я когда-либо мог себе представить. письмо.
Кто-нибудь знает, как создать такой синтаксис, используя control.Exception, где можно передать функцию регистратора по имени -для использования в блоке catch?
Было бы здорово, если бы были «варианты использования» для control.Exception, но мне кажется, что эта утилита предназначена для более продвинутых разработчиков Scala