A class that can be instantiated for the break control abstraction.
A marker trait indicating that the Throwable
it is mixed into is
intended for flow control.
A marker trait indicating that the Throwable
it is mixed into is
intended for flow control.
Note that Throwable
subclasses which extend this trait may extend any
other Throwable
subclass (eg. RuntimeException
) and are not required
to extend Throwable
directly.
Instances of Throwable
subclasses marked in this way should not normally
be caught. Where catch-all behaviour is required ControlThrowable
should be propagated, for example:
import scala.util.control.ControlThrowable try { // Body might throw arbitrarily } catch { case c: ControlThrowable => throw c // propagate case t: Exception => log(t) // log and suppress }
A trait for exceptions which, for efficiency reasons, do not fill in the stack trace.
A trait for exceptions which, for efficiency reasons, do not fill in the stack trace. Stack trace suppression can be disabled on a global basis via a system property wrapper in scala.sys.SystemProperties.
2.8
An object that can be used for the break control abstraction.
An object that can be used for the break control abstraction. Example usage:
import Breaks.{break, breakable} breakable { for (...) { if (...) break } }
Classes representing the components of exception handling.
Classes representing the components of exception handling. Each class is independently composable. Some example usages:
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)
This class differs from scala.util.Try
in that it focuses on composing exception handlers rather than
composing behavior. All behavior should be composed first and fed to a Catch
object using one of the
opt
or either
methods.
Extractor of non-fatal Throwables.
Extractor of non-fatal Throwables. Will not match fatal errors like VirtualMachineError
(for example, OutOfMemoryError
and StackOverflowError
, subclasses of VirtualMachineError
), ThreadDeath
,
LinkageError
, InterruptedException
, ControlThrowable
.
Note that scala.util.control.ControlThrowable, an internal Throwable, is not matched by
NonFatal
(and would therefore be thrown).
For example, all harmless Throwables can be caught by:
try { // dangerous stuff } catch { case NonFatal(e) => log.error(e, "Something not that bad.") // or case e if NonFatal(e) => log.error(e, "Something not that bad.") }
Methods exported by this object implement tail calls via trampolining.
Methods exported by this object implement tail calls via trampolining.
Tail calling methods have to return their result using done
or call the
next method using tailcall
. Both return a TailRec
object. The result
of evaluating a tailcalling function can be retrieved from a Tailrec
value using method result
.
Implemented as described in "Stackless Scala with Free Monads"
http://blog.higher-order.com/assets/trampolines.pdf
Here's a usage example:
import scala.util.control.TailCalls._ def isEven(xs: List[Int]): TailRec[Boolean] = if (xs.isEmpty) done(true) else tailcall(isOdd(xs.tail)) def isOdd(xs: List[Int]): TailRec[Boolean] = if (xs.isEmpty) done(false) else tailcall(isEven(xs.tail)) isEven((1 to 100000).toList).result def fib(n: Int): TailRec[Int] = if (n < 2) done(n) else for { x <- tailcall(fib(n - 1)) y <- tailcall(fib(n - 2)) } yield (x + y) fib(40).result
A class that can be instantiated for the break control abstraction. Example usage:
Calls to break from one instantiation of
Breaks
will never target breakable objects of some other instantiation.