2016-10-25 22 views
1

在对a paper由Eugene Burmako:Scala - “模式匹配导致松散类型保证”?

在阿卡,一个[...],演员通常交互使用无类型tell方法。由于参与者能够相互发送任意类型的消息,因此类型信息在接收方丢失,并且通常只能使用模式匹配进行恢复,松动类型保证

他在这里提到了什么保证,为什么模式匹配会削弱它们?

回答

3

下面是一个简单的例子阿卡(来自:here

import akka.actor._ 

class HelloActor(myName: String) extends Actor { 
    def receive = { 
    case "hello" => println("hello from %s".format(myName)) 
    case _  => println("'huh?', said %s".format(myName)) 
    } 
} 

object Main extends App { 
    val system = ActorSystem("HelloSystem") 
    val helloActor = system.actorOf(Props(new HelloActor("Fred")), name ="helloactor") 
    helloActor ! "hello" 
    helloActor ! "buenos dias" 
} 

在HelloActor接收函数需要一个任何类型的。 (从技术上讲,这是从任何单位到部分单位的部分功能)。这意味着要理解它的类型,我们需要模式匹配。我可以发送一个Int给HelloActor,编译器不会阻止我。如果我只是有一个正常的函数接受了一个字符串,那么编译器会检测到它。这种缺乏类型安全性是我认为这句话是指的。

有打字的akka​​演员,但我从来没有使用过他们,我不知道他们带来了什么。

4

Spoty Spot的答案告诉你失去了什么保证,但“为什么模式匹配会削弱它们”的答案是它没有。你稍微误解了这句话。代替

图案匹配,松动型保证

读它作为

类型信息丢失在接收机侧,并且可以典型地仅使用图案被回收配套,松动型保证

“通常只能恢复......”是parenthetical