- About Scala
- Documentation
- Code Examples
- Software
- Scala Developers
actor react loop abstraction
Sun, 2010-04-11, 15:07
hi,
last week i started my first scala project and, coming from a ruby and
java background, am very impressed by its powerful abstractions.
unfortunately, i can't figure out how to abstract away an actor and
its react loop that i use for event listening.
i want to replace
env.addObserver(actor {
loop {
react {
case EnvironmentChangeMessage(parameter, value) =>
handleEnvironmentChange(parameter, value)
}
}
})
with something like:
env.observe {
case EnvironmentChangeMessage(parameter, value) =>
handleEnvironmentChange(parameter, value)
}
env is an instance of a class that extends the following Observable trait:
case class EnvironmentChangeMessage(val parameter: Symbol, val value:
Double) extends ObservableChangedMessage()
class Environment() extends Observable {
// ...
}
case class ObservableChangedMessage()
trait Observable {
val observers: ListBuffer[Actor] = new ListBuffer()
def addObserver(observer: Actor) {
observers += observer
}
def notifyObservers(msg: ObservableChangedMessage) {
observers.foreach { observer => observer ! msg }
}
}
the method observe probably looks somehow like this, but can't fill in the gaps.
def observe(__?__) {
addObserver(actor {
loop {
react {
__?__
}
}
})
}
any help or links are highly appreciated. thanks in advance,
sean
Sun, 2010-04-11, 15:27
#2
Re: Re: actor react loop abstraction
"react f" should be enough.
On Sun, Apr 11, 2010 at 11:09 AM, Sean Buttinger <sean.buttinger@gmail.com> wrote:
--
Daniel C. Sobral
I travel to the future all the time.
On Sun, Apr 11, 2010 at 11:09 AM, Sean Buttinger <sean.buttinger@gmail.com> wrote:
i guess i figured it out:
def observe(f: PartialFunction[Any, Unit]) {
addObserver(actor {
loop {
react {
f
}
}
})
}
right?
cheers,
sean
On Sun, Apr 11, 2010 at 4:07 PM, Sean Buttinger
<sean.buttinger@gmail.com> wrote:
> hi,
>
> last week i started my first scala project and, coming from a ruby and
> java background, am very impressed by its powerful abstractions.
> unfortunately, i can't figure out how to abstract away an actor and
> its react loop that i use for event listening.
>
> i want to replace
>
> env.addObserver(actor {
> loop {
> react {
> case EnvironmentChangeMessage(parameter, value) =>
> handleEnvironmentChange(parameter, value)
> }
> }
> })
>
> with something like:
>
> env.observe {
> case EnvironmentChangeMessage(parameter, value) =>
> handleEnvironmentChange(parameter, value)
> }
>
> env is an instance of a class that extends the following Observable trait:
>
> case class EnvironmentChangeMessage(val parameter: Symbol, val value:
> Double) extends ObservableChangedMessage()
>
> class Environment() extends Observable {
> // ...
> }
>
> case class ObservableChangedMessage()
>
> trait Observable {
>
> val observers: ListBuffer[Actor] = new ListBuffer()
>
> def addObserver(observer: Actor) {
> observers += observer
> }
>
> def notifyObservers(msg: ObservableChangedMessage) {
> observers.foreach { observer => observer ! msg }
> }
> }
>
>
> the method observe probably looks somehow like this, but can't fill in the gaps.
>
> def observe(__?__) {
> addObserver(actor {
> loop {
> react {
> __?__
> }
> }
> })
> }
>
> any help or links are highly appreciated. thanks in advance,
>
> sean
>
>
>
>
>
> --
> Email [em'aj; germ.-fr.]: Schmelzüberzug als Oberflächenschutz oder Verzierung
>
--
Email [em'aj; germ.-fr.]: Schmelzüberzug als Oberflächenschutz oder Verzierung
--
Daniel C. Sobral
I travel to the future all the time.
i guess i figured it out:
def observe(f: PartialFunction[Any, Unit]) {
addObserver(actor {
loop {
react {
f
}
}
})
}
right?
cheers,
sean
On Sun, Apr 11, 2010 at 4:07 PM, Sean Buttinger
wrote:
> hi,
>
> last week i started my first scala project and, coming from a ruby and
> java background, am very impressed by its powerful abstractions.
> unfortunately, i can't figure out how to abstract away an actor and
> its react loop that i use for event listening.
>
> i want to replace
>
> env.addObserver(actor {
> loop {
> react {
> case EnvironmentChangeMessage(parameter, value) =>
> handleEnvironmentChange(parameter, value)
> }
> }
> })
>
> with something like:
>
> env.observe {
> case EnvironmentChangeMessage(parameter, value) =>
> handleEnvironmentChange(parameter, value)
> }
>
> env is an instance of a class that extends the following Observable trait:
>
> case class EnvironmentChangeMessage(val parameter: Symbol, val value:
> Double) extends ObservableChangedMessage()
>
> class Environment() extends Observable {
> // ...
> }
>
> case class ObservableChangedMessage()
>
> trait Observable {
>
> val observers: ListBuffer[Actor] = new ListBuffer()
>
> def addObserver(observer: Actor) {
> observers += observer
> }
>
> def notifyObservers(msg: ObservableChangedMessage) {
> observers.foreach { observer => observer ! msg }
> }
> }
>
>
> the method observe probably looks somehow like this, but can't fill in the gaps.
>
> def observe(__?__) {
> addObserver(actor {
> loop {
> react {
> __?__
> }
> }
> })
> }
>
> any help or links are highly appreciated. thanks in advance,
>
> sean
>
>
>
>
>
> --
> Email [em'aj; germ.-fr.]: Schmelzüberzug als Oberflächenschutz oder Verzierung
>