Movatterモバイル変換


[0]ホーム

URL:


Scala 3
3.7.4
LearnInstallPlaygroundFind A LibraryCommunityBlog
Scala 3
LearnInstallPlaygroundFind A LibraryCommunityBlog
DocsAPI
Generated with
Copyright (c) 2002-2025, LAMP/EPFL
Copyright (c) 2002-2025, LAMP/EPFL
Scala 3/scala/scala.util/scala.util.control

scala.util.control

Members list

Type members

Classlikes

classBreaks

Provides thebreak control abstraction.

Provides thebreak control abstraction.

Thebreak method uses aControlThrowable to transfer control up the stack to an enclosingbreakable.

It is typically used to abruptly terminate afor loop, but can be used to return from an arbitrary computation.

Control resumes after thebreakable.

If there is no matchingbreakable, theBreakControl thrown bybreak is handled in the usual way: if not caught, it may terminate the currentThread.

BreakControl carries no stack trace, so the default exception handler does not print useful diagnostic information; there is no compile-time warning if there is no matchingbreakable.

A catch clause usingNonFatal is safe to use withbreak; it will not short-circuit the transfer of control to the enclosingbreakable.

Abreakable matches a call tobreak if the methods were invoked on the same receiver object, which may be the convenience valueBreaks.

Example usage:

val mybreaks = new Breaksimport mybreaks.{break, breakable}breakable {  for (x <- xs) {    if (done) break()    f(x)  }}

Calls tobreak from one instance ofBreaks will never resume at thebreakable of some other instance.

Any intervening exception handlers should useNonFatal, or useTry for evaluation:

val mybreaks = new Breaksimport mybreaks.{break, breakable}breakable {  for (x <- xs) Try { if (quit) break else f(x) }.foreach(println)}

Attributes

Companion
object
Source
Breaks.scala
Supertypes
classObject
traitMatchable
classAny
Known subtypes
objectBreaks
objectBreaks extendsBreaks

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  }}

Attributes

Companion
class
Source
Breaks.scala
Supertypes
classBreaks
classObject
traitMatchable
classAny
Self type
Breaks.type
abstractclassControlThrowable(message:String) extendsThrowable

A parent class for throwable objects intended for flow control.

A parent class for throwable objects intended for flow control.

Instances ofControlThrowable should not normally be caught.

As a convenience,NonFatal does not matchControlThrowable.

import scala.util.control.{Breaks, NonFatal}, Breaks.{break, breakable}breakable {  for (v <- values) {    try {      if (p(v)) break      else ???    } catch {      case NonFatal(t) => log(t)  // can't catch a break    }  }}

Suppression is disabled, because flow control should not suppress an exceptional condition. Stack traces are also disabled, allowing instances ofControlThrowable to be safely reused.

Instances ofControlThrowable should not normally have a cause. Legacy subclasses may set a cause usinginitCause.

Attributes

Source
ControlThrowable.scala
Supertypes
classThrowable
classObject
traitMatchable
classAny
Known subtypes
objectException

Classes representing the components of exception handling.

Classes representing the components of exception handling.

Each class is independently composable.

This class differs fromscala.util.Try in that it focuses on composing exception handlers rather than composing behavior. All behavior should be composed first and fed to aCatch object using one of theopt,either orwithTry methods. Taken together the classes provide a DSL for composing catch and finally behaviors.

Examples

Create aCatch which handles specified exceptions.

import scala.util.control.Exception._import java.net._val s = "https://www.scala-lang.org/"// Some(https://www.scala-lang.org/)val x1: Option[URL] = catching(classOf[MalformedURLException]) opt new URL(s)// Right(https://www.scala-lang.org/)val x2: Either[Throwable,URL] =  catching(classOf[MalformedURLException], classOf[NullPointerException]) either new URL(s)// Success(https://www.scala-lang.org/)val x3: Try[URL] = catching(classOf[MalformedURLException], classOf[NullPointerException]) withTry new URL(s)val defaultUrl = new URL("http://example.com")//  URL(http://example.com) because htt/xx throws MalformedURLExceptionval x4: URL = failAsValue(classOf[MalformedURLException])(defaultUrl)(new URL("htt/xx"))

Create aCatch which logs exceptions usinghandling andby.

def log(t: Throwable): Unit = t.printStackTraceval withThrowableLogging: Catch[Unit] = handling(classOf[MalformedURLException]) by (log)def printUrl(url: String) : Unit = {  val con = new URL(url) openConnection()  val source = scala.io.Source.fromInputStream(con.getInputStream())  source.getLines().foreach(println)}val badUrl = "htt/xx"// Prints stacktrace,//   java.net.MalformedURLException: no protocol: htt/xx//     at java.net.URL.<init>(URL.java:586)withThrowableLogging { printUrl(badUrl) }val goodUrl = "https://www.scala-lang.org/"// Prints page content,//   &lt;!DOCTYPE html&gt;//   &lt;html&gt;withThrowableLogging { printUrl(goodUrl) }

Useunwrapping to create aCatch that unwraps exceptions before rethrowing.

class AppException(cause: Throwable) extends RuntimeException(cause)val unwrappingCatch: Catch[Nothing] = unwrapping(classOf[AppException])def calcResult: Int = throw new AppException(new NullPointerException)// Throws NPE not AppException,//   java.lang.NullPointerException//     at .calcResult(&lt;console&gt;:17)val result = unwrappingCatch(calcResult)

UsefailAsValue to provide a default when a specified exception is caught.

val inputDefaulting: Catch[Int] = failAsValue(classOf[NumberFormatException])(0)val candidatePick = "seven" // scala.io.StdIn.readLine()// Int = 0val pick = inputDefaulting(candidatePick.toInt)

Compose multipleCatchs withor to build aCatch that provides default values varied by exception.

val formatDefaulting: Catch[Int] = failAsValue(classOf[NumberFormatException])(0)val nullDefaulting: Catch[Int] = failAsValue(classOf[NullPointerException])(-1)val otherDefaulting: Catch[Int] = nonFatalCatch withApply(_ => -100)val combinedDefaulting: Catch[Int] = formatDefaulting or nullDefaulting or otherDefaultingdef p(s: String): Int = s.length * s.toInt// Int = 0combinedDefaulting(p("tenty-nine"))// Int = -1combinedDefaulting(p(null: String))// Int = -100combinedDefaulting(throw new IllegalStateException)// Int = 22combinedDefaulting(p("11"))

Attributes

Source
Exception.scala
Supertypes
classObject
traitMatchable
classAny
Self type

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 inscala.sys.SystemProperties.

Attributes

Note

Since JDK 1.7, a similar effect can be achieved withclass Ex extends Throwable(..., writableStackTrace = false)

Companion
object
Source
NoStackTrace.scala
Supertypes
classThrowable
classObject
traitMatchable
classAny

Attributes

Companion
trait
Source
NoStackTrace.scala
Supertypes
classObject
traitMatchable
classAny
Self type
objectNonFatal

Extractor of non-fatal Throwables.

Extractor of non-fatal Throwables. Will not match fatal errors likeVirtualMachineError (for example,OutOfMemoryError andStackOverflowError, subclasses ofVirtualMachineError),ThreadDeath,LinkageError,InterruptedException,ControlThrowable.

Note thatscala.util.control.ControlThrowable, an internal Throwable, is not matched byNonFatal (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.")}

Attributes

Source
NonFatal.scala
Supertypes
classObject
traitMatchable
classAny
Self type
objectTailCalls

Methods exported by this object implement tail calls via trampolining.

Methods exported by this object implement tail calls via trampolining.

Tail calling methods must either return their result usingdone or call the next method usingtailcall. Both return an instance ofTailRec. The result of evaluating a tailcalling function can be retrieved from aTailRec value using methodresult.

Implemented as described in "Stackless Scala with Free Monads"https://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).resultdef fib(n: Int): TailRec[Int] =  if (n < 2) done(n) else for {    x <- tailcall(fib(n - 1))    y <- tailcall(fib(n - 2))  } yield x + yfib(40).result

Attributes

Source
TailCalls.scala
Supertypes
classObject
traitMatchable
classAny
Self type

Deprecated classlikes

Library implementation of nonlocal return.

Library implementation of nonlocal return.

Usage:

import scala.util.control.NonLocalReturns.*

returning { ... throwReturn(x) ... }

This API has been deprecated. Its functionality is better served by

  • scala.util.boundary in place ofreturning
  • scala.util.break in place ofthrowReturn

The new abstractions work with plainRuntimeExceptions and are more performant, since returns within the scope of the same method can be rewritten by the compiler to jumps.

Attributes

Deprecated
[Since version 3.3]Use scala.util.boundary instead
Source
NonLocalReturns.scala
Supertypes
classObject
traitMatchable
classAny
Self type
In this article
Generated with
Copyright (c) 2002-2025, LAMP/EPFL
Copyright (c) 2002-2025, LAMP/EPFL

[8]ページ先頭

©2009-2025 Movatter.jp