2016-10-28 4 views
1

Что такое ключевое слово opt в следующем коде?Scala: Что такое ключевое слово opt?

import scala.util.control.Exception._ 
import java.net._ 

val s = "http://www.scala-lang.org/" 
val x1 = catching(classOf[MalformedURLException]) opt new URL(s) 
val x2 = catching(classOf[MalformedURLException], classOf[NullPointerException]) either new URL(s) 

http://www.scala-lang.org/api/current/scala/util/control/Exception $ .html

ответ

4

Это не ключевое слово, это метод импортирован из scala.util.control.Exception._, вот его определение и Scaladoc:

/** Apply this catch logic to the supplied body, mapping the result 
* into `Option[T]` - `None` if any exception was caught, `Some(T)` otherwise. 
*/ 
def opt[U >: T](body: => U): Option[U] = toOption(Some(body)) 
+0

Спасибо за вашу помощь! – JNish

7

Это не является ключевым словом, это метод, определенный в Catch[T], который имеет тип результата catching(). См свой документ на http://www.scala-lang.org/api/current/index.html#[email protected][U%3E:T](body:=%3EU):Option[U]

Приведенный выше код эквивалентен следующему, где мы используем . синтаксис для вызова методов opt и either:

val s = "http://www.scala-lang.org/" 
val x1 = catching(classOf[MalformedURLException]).opt(new URL(s)) 
val x2 = catching(classOf[MalformedURLException], classOf[NullPointerException]).either(new URL(s)) 
+0

Два довольно похожих ответа, которые были опубликованы почти в одно и то же время: оба - как это этикет - что нам теперь делать? :)) –

+1

AFAIK Stack Overflow не позволяет принимать два ответа на один и тот же вопрос, поэтому нет справедливого решения. Наименее несправедливым было бы выбрать случайным образом, какой из них принять, и перенести на другой ... – sjrd

+0

Другая «стратегия», которую я иногда использую, заключается в том, чтобы принять ответ пользователя с наименьшей репутацией. – sjrd

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