abstract class Ref[A] extends Serializable
A Ref
is a purely functional description of a mutable reference. The
fundamental operations of a Ref
are set
and get
. set
sets the
reference to a new value. get
gets the current value of the reference.
By default, Ref
is implemented in terms of compare and swap operations for
maximum performance and does not support performing effects within update
operations. If you need to perform effects within update operations you can
create a Ref.Synchronized
, a specialized type of Ref
that supports
performing effects within update operations at some cost to performance. In
this case writes will semantically block other writers, while multiple
readers can read simultaneously.
NOTE: While Ref
provides the functional equivalent of a mutable reference,
the value inside the Ref
should normally be immutable since compare and
swap operations are not safe for mutable values that do not support
concurrent access. If you do need to use a mutable value Ref.Synchronized
will guarantee that access to the value is properly synchronized.
- Alphabetic
- By Inheritance
- Ref
- Serializable
- AnyRef
- Any
- Hide All
- Show All
- Public
- Protected
Instance Constructors
- new Ref()
Abstract Value Members
- abstract def get(implicit trace: Trace): UIO[A]
Reads the value from the
Ref
. - abstract def modify[B](f: (A) => (B, A))(implicit trace: Trace): UIO[B]
Atomically modifies the
Ref
with the specified function, which computes a return value for the modification.Atomically modifies the
Ref
with the specified function, which computes a return value for the modification. This is a more powerful version ofupdate
. - abstract def set(a: A)(implicit trace: Trace): UIO[Unit]
Writes a new value to the
Ref
, with a guarantee of immediate consistency (at some cost to performance). - abstract def setAsync(a: A)(implicit trace: Trace): UIO[Unit]
Writes a new value to the
Ref
without providing a guarantee of immediate consistency.
Concrete Value Members
- final def !=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def ##: Int
- Definition Classes
- AnyRef → Any
- final def ==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def asInstanceOf[T0]: T0
- Definition Classes
- Any
- def clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.CloneNotSupportedException]) @native()
- final def eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- def equals(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef → Any
- def finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.Throwable])
- final def getAndSet(a: A)(implicit trace: Trace): UIO[A]
Atomically writes the specified value to the
Ref
, returning the value immediately before modification. - final def getAndUpdate(f: (A) => A)(implicit trace: Trace): UIO[A]
Atomically modifies the
Ref
with the specified function, returning the value immediately before modification. - final def getAndUpdateSome(pf: PartialFunction[A, A])(implicit trace: Trace): UIO[A]
Atomically modifies the
Ref
with the specified partial function, returning the value immediately before modification.Atomically modifies the
Ref
with the specified partial function, returning the value immediately before modification. If the function is undefined on the current value it doesn't change it. - final def getClass(): Class[_ <: AnyRef]
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
- def hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
- final def isInstanceOf[T0]: Boolean
- Definition Classes
- Any
- final def modifySome[B](default: B)(pf: PartialFunction[A, (B, A)])(implicit trace: Trace): UIO[B]
Atomically modifies the
Ref
with the specified partial function, which computes a return value for the modification if the function is defined on the current value otherwise it returns a default value.Atomically modifies the
Ref
with the specified partial function, which computes a return value for the modification if the function is defined on the current value otherwise it returns a default value. This is a more powerful version ofupdateSome
. - final def ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- final def notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
- final def notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
- final def synchronized[T0](arg0: => T0): T0
- Definition Classes
- AnyRef
- def toString(): String
- Definition Classes
- AnyRef → Any
- final def update(f: (A) => A)(implicit trace: Trace): UIO[Unit]
Atomically modifies the
Ref
with the specified function. - final def updateAndGet(f: (A) => A)(implicit trace: Trace): UIO[A]
Atomically modifies the
Ref
with the specified function and returns the updated value. - final def updateSome(pf: PartialFunction[A, A])(implicit trace: Trace): UIO[Unit]
Atomically modifies the
Ref
with the specified partial function.Atomically modifies the
Ref
with the specified partial function. If the function is undefined on the current value it doesn't change it. - final def updateSomeAndGet(pf: PartialFunction[A, A])(implicit trace: Trace): UIO[A]
Atomically modifies the
Ref
with the specified partial function.Atomically modifies the
Ref
with the specified partial function. If the function is undefined on the current value it returns the old value without changing it. - final def wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException]) @native()