scalax.io

Resource

trait Resource[+R] extends ManagedResourceOperations[R] with ResourceOps[R, Resource[R]]

A Resource that can be used to do IO. Primarily it wraps objects from the java io and makes them more Scala friendly.

A common question about Resource is: "Why no simply expose scalax.io.Input, scalax.io.Output, scalax.io.Seekable, scalax.io.ReadChars, scalax.io.WriteChars? Why do we need a Resource[R] object?"

There are several reasons for this. There are several situations where a developer needs access to the underlying resource.

Perhaps they need to interact with a Java API which does not use the scalax.io.Input, etc... APIs. Another possibility is that the resource may be a specific implementation like PrintStream and they want to use those custom APIs instead of the Scala IO apis. In that case Resource provides them with the ARM functionality that is very useful.

R

The type of the resource that will be managed by the ManagedResource

Self Type
Resource[R]
Since

1.0

Linear Supertypes
ResourceOps[R, Resource[R]], ManagedResourceOperations[R], ManagedResource[R], AnyRef, Any
Known Subclasses
Ordering
  1. Alphabetic
  2. By inheritance
Inherited
  1. Resource
  2. ResourceOps
  3. ManagedResourceOperations
  4. ManagedResource
  5. AnyRef
  6. Any
  1. Hide All
  2. Show all
Learn more about member selection
Visibility
  1. Public
  2. All

Abstract Value Members

  1. abstract def addCloseAction(newCloseAction: CloseAction[R]): Resource[R]

    Add a CloseAction that will be executed each time the resource is closed.

    Add a CloseAction that will be executed each time the resource is closed.

    newCloseAction

    the action to add

    returns

    a new resource instance with the close action added

    Definition Classes
    ResourceOps
  2. abstract def context: ResourceContext

    Get the Resource context associated with this Resource instance.

    Get the Resource context associated with this Resource instance.

    returns

    the associated ResourceContext

    Definition Classes
    ResourceOps
    Note

    as Resources are immutable objects a given Resource instance will always be associated with the same ResourceContext

  3. abstract def open(): OpenedResource[R]

    Creates a new instance of the underlying resource (or opens it).

    Creates a new instance of the underlying resource (or opens it). Sometimes the code block used to create the Resource is non-reusable in which case this Resource can only be used once. This is not recommended.

    When creating a resource it is recommended to pass the code block for creating the resource to the resource so that the resource can be reused. Of course this is not always possible

    This method should only be used with care in cases when Automatic Resource Management cannot be used because the InputStream must be closed manually.

    This is public only to permit interoperability with certain Java APIs. A better pattern of use should be:

    resource.acquireFor {
    // call java API
    }

    or

    val calculatedResult = resource.acquireAndGet {
    // cal java API that returns a result
    }
    returns

    the actual resource that has been opened

    Note

    normally the error handler registered with the associated ResourceContext will handle any errors opening the resource, but when calling this method the caller must handle any possible errors that are raised.

  4. abstract def updateContext(newContext: ResourceContext): Resource[R]

    Create a Resource instance that is configured with the new ResourceContext

    Create a Resource instance that is configured with the new ResourceContext

    newContext

    A new ResourceContext

    returns

    a new instance configured with the new context

    Definition Classes
    ResourceOps

Concrete Value Members

  1. def !: R @scala.util.continuations.cpsParam[Unit,Unit]

    Definition Classes
    ManagedResourceOperations → ManagedResource
  2. final def !=(arg0: AnyRef): Boolean

    Definition Classes
    AnyRef
  3. final def !=(arg0: Any): Boolean

    Definition Classes
    Any
  4. final def ##(): Int

    Definition Classes
    AnyRef → Any
  5. final def ==(arg0: AnyRef): Boolean

    Definition Classes
    AnyRef
  6. final def ==(arg0: Any): Boolean

    Definition Classes
    Any
  7. def acquireAndGet[B](f: (R) ⇒ B): B

    Definition Classes
    ManagedResourceOperations → ManagedResource
  8. final def acquireFor[B](f: (R) ⇒ B): Either[List[Throwable], B]

    Open the resource execute the function and either return all errors as a list or the result of the function execution.

    Open the resource execute the function and either return all errors as a list or the result of the function execution.

    On open and close error handlers in ResourceContext are called. If they then raise errors the errors are captured and returned as a Right[List[Throwable]]

    Perhaps the worst method I have ever written :-(

    Definition Classes
    Resource → ManagedResource
  9. def and[B](that: ManagedResource[B]): ManagedResource[(R, B)]

    Definition Classes
    ManagedResourceOperations → ManagedResource
  10. final def asInstanceOf[T0]: T0

    Definition Classes
    Any
  11. def clone(): AnyRef

    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws()
  12. final def eq(arg0: AnyRef): Boolean

    Definition Classes
    AnyRef
  13. def equals(arg0: Any): Boolean

    Definition Classes
    AnyRef → Any
  14. def finalize(): Unit

    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws()
  15. def flatMap[B](f: (R) ⇒ ManagedResource[B]): ManagedResource[B]

    Definition Classes
    ManagedResourceOperations → ManagedResource
  16. def foreach(f: (R) ⇒ Unit): Unit

    Definition Classes
    ManagedResourceOperations → ManagedResource
  17. final def getClass(): Class[_]

    Definition Classes
    AnyRef → Any
  18. def hashCode(): Int

    Definition Classes
    AnyRef → Any
  19. final def isInstanceOf[T0]: Boolean

    Definition Classes
    Any
  20. def map[B](f: (R) ⇒ B): ExtractableManagedResource[B]

    Definition Classes
    ManagedResourceOperations → ManagedResource
  21. final def ne(arg0: AnyRef): Boolean

    Definition Classes
    AnyRef
  22. final def notify(): Unit

    Definition Classes
    AnyRef
  23. final def notifyAll(): Unit

    Definition Classes
    AnyRef
  24. def now: R @scala.util.continuations.cpsParam[Unit,Unit]

    Definition Classes
    ManagedResourceOperations → ManagedResource
  25. def reflect[B]: R @util.continuations.cps[Either[List[Throwable],B]]

    Definition Classes
    ManagedResourceOperations → ManagedResource
  26. final def synchronized[T0](arg0: ⇒ T0): T0

    Definition Classes
    AnyRef
  27. def toString(): String

    Definition Classes
    AnyRef → Any
  28. def toTraversable[B](implicit ev: <:<[R, TraversableOnce[B]]): Traversable[B]

    Definition Classes
    ManagedResourceOperations → ManagedResource
  29. def updateContext(f: (ResourceContext) ⇒ ResourceContext): Resource[R]

    Update the current ResourceContext and return a new Resource instance with the updated context

    Update the current ResourceContext and return a new Resource instance with the updated context

    f

    A function for transforming the current context to a new context with new values.

    returns

    a new instance configured with the new context

    Definition Classes
    ResourceOps
  30. final def wait(): Unit

    Definition Classes
    AnyRef
    Annotations
    @throws()
  31. final def wait(arg0: Long, arg1: Int): Unit

    Definition Classes
    AnyRef
    Annotations
    @throws()
  32. final def wait(arg0: Long): Unit

    Definition Classes
    AnyRef
    Annotations
    @throws()

Inherited from ResourceOps[R, Resource[R]]

Inherited from ManagedResourceOperations[R]

Inherited from ManagedResource[R]

Inherited from AnyRef

Inherited from Any

Ungrouped