0
實施阿卡演員我用Java實現簡單的計數器演員:如何在實用的風格與Java
public class CounterJavaActor extends UntypedActor {
int count = 0;
@Override
public void onReceive(Object message) throws Exception {
if (message.equals("incr")) {
count += 1;
} else if (message.equals("get")) {
sender().tell(count, self());
}
}
}
在上coursera「Scala的功能性反應編程」課程,我看到櫃檯的功能impementation:
/**
* Advantages:
* state change is explicit
* state is scoped to current behaviour
*/
class CounterScala extends Actor{
def counter(n: Int) : Receive = {
case "incr" => context.become(counter(n+1))
case "get" => sender ! n
}
def receive = counter(0)
}
UPD: 我的問題,在Java中我不能追償的功能調用,比如在斯卡拉counter(n+1)
。意思是:
public class CounterJava8Actor extends AbstractActor {
//counter(0) in scala
private PartialFunction<Object, BoxedUnit> counter;
private int n = 0;
public CounterJava8Actor() {
counter =
ReceiveBuilder.
matchEquals("get", s -> {
sender().tell(n, self());
}).
matchEquals("inc", s -> {
//become(counter(n+1) in scala
context().become(counter);
}).build();
receive(counter);
}
}
可以用java的功能樣式來實現它嗎?
我的問題 - 斯卡拉樣的函數調用在部分函數上。我更新我的問題 – zella
這很容易,但斯卡拉語法有些尷尬我:( – zella