Pro

trait Pro[+A]

Value Provider

Whenever value provider belongs to an object, it effectively becomes a property holder for this object.

Properties Framework

There are 4 types of standard properties:

The inheritance graph looks like:

       Pro.O
      /      \
   Pro        Pro.OM
      \     /
       Pro.M

Here is an example of 'name' property definition hierarchy:

        trait Foo:                                     // 'name' is read only
          def namePro          : Pro[String]
          def name             : String = namePro()    // required shortcut

        trait Foo_M extends Foo:                       // 'name' is read/write
          def namePro          : Pro.M[String]
          def name_=(v:String) : Unit = namePro() = v  // required shortcut

        trait Foo_O extends Foo:                       // 'name' is read/listenTo
          def namePro          : Pro.O[String]

        trait Foo_OM extends Foo_O with Foo_M:         // 'name' is read/write/listenTo
          def namePro          : Pro.OM[String]

Note. The 'required shortcuts' must be implemented. They will not even show up in documentation, because they are assumed to be there

Source
__.scala
class java.lang.Object
trait scala.Matchable
class Any
trait Pro.Mutable[Pro.Mutable.A]
trait Pro.ObservableMutable[Pro.ObservableMutable.A]
class Pro.ObservableMutable.X.Abstract[Pro.ObservableMutable.X.Abstract.A]
class Pro.ObservableMutable.X.Basic[Pro.ObservableMutable.X.Basic.A]
trait Pro.ObservableMutable.X.Base[Pro.ObservableMutable.X.Base.A]
class Pro.Mutable.X.Abstract[Pro.Mutable.X.Abstract.A]
class Pro.Mutable.X.Basic[Pro.Mutable.X.Basic.A]
trait Pro.Observable[Pro.Observable.A]
trait Pro.Observable.X.Base[Pro.Observable.X.Base.A]
class Boolean.G.Pro.ObservableMutable.X.Basic[Boolean.G.Pro.ObservableMutable.X.Basic.A]
class Byte.G.Pro.ObservableMutable.X.Basic[Byte.G.Pro.ObservableMutable.X.Basic.A]
class Char.G.Pro.ObservableMutable.X.Basic[Char.G.Pro.ObservableMutable.X.Basic.A]
class Double.G.Pro.ObservableMutable.X.Basic[Double.G.Pro.ObservableMutable.X.Basic.A]
class Float.G.Pro.ObservableMutable.X.Basic[Float.G.Pro.ObservableMutable.X.Basic.A]
class Int.G.Pro.ObservableMutable.X.Basic[Int.G.Pro.ObservableMutable.X.Basic.A]
class Long.G.Pro.ObservableMutable.X.Basic[Long.G.Pro.ObservableMutable.X.Basic.A]
class Short.G.Pro.ObservableMutable.X.Basic[Short.G.Pro.ObservableMutable.X.Basic.A]
class Pro.Observable.X.Abstract[Pro.Observable.X.Abstract.A]
class Boolean.G.Pro.Observable.X.Abstract[Boolean.G.Pro.Observable.X.Abstract.A]
class Boolean.G.Pro.ObservableMutable.X.Abstract[Boolean.G.Pro.ObservableMutable.X.Abstract.A]
class Byte.G.Pro.Observable.X.Abstract[Byte.G.Pro.Observable.X.Abstract.A]
class Byte.G.Pro.ObservableMutable.X.Abstract[Byte.G.Pro.ObservableMutable.X.Abstract.A]
class Char.G.Pro.Observable.X.Abstract[Char.G.Pro.Observable.X.Abstract.A]
class Char.G.Pro.ObservableMutable.X.Abstract[Char.G.Pro.ObservableMutable.X.Abstract.A]
class Double.G.Pro.Observable.X.Abstract[Double.G.Pro.Observable.X.Abstract.A]
class Double.G.Pro.ObservableMutable.X.Abstract[Double.G.Pro.ObservableMutable.X.Abstract.A]
class Float.G.Pro.Observable.X.Abstract[Float.G.Pro.Observable.X.Abstract.A]
class Float.G.Pro.ObservableMutable.X.Abstract[Float.G.Pro.ObservableMutable.X.Abstract.A]
class Int.G.Pro.Observable.X.Abstract[Int.G.Pro.Observable.X.Abstract.A]
class Int.G.Pro.ObservableMutable.X.Abstract[Int.G.Pro.ObservableMutable.X.Abstract.A]
class Long.G.Pro.Observable.X.Abstract[Long.G.Pro.Observable.X.Abstract.A]
class Long.G.Pro.ObservableMutable.X.Abstract[Long.G.Pro.ObservableMutable.X.Abstract.A]
class Short.G.Pro.Observable.X.Abstract[Short.G.Pro.Observable.X.Abstract.A]
class Short.G.Pro.ObservableMutable.X.Abstract[Short.G.Pro.ObservableMutable.X.Abstract.A]
class Pro.Observable.X.Basic[Pro.Observable.X.Basic.A]
trait Pro.Observable.X.ActivationBase[Pro.Observable.X.ActivationBase.A]
trait Pro.X.Base[Pro.X.Base.A]
class Pro.X.Abstract[Pro.X.Abstract.A]

Def

def apply(): A

Get value

Get value

Returns property value

   val pro: Pro.M[String] = Pro.M[String]("abc")

   val v1 = pro.apply() // Regular call
   val v2 = pro()       // Scala "syntactic sugar" call
Source
__.scala

Extension

inline def contains[A](v: A): Boolean
Source
__.scala
def mapView[A](f: A => B): Pro[B]
Source
__.scala