我試圖讓Scala的演員(阿卡)一握,但我只是碰到「的情況下」使用的一些奇怪的是一點我不明白,就來了:Scala的情況下,語法的理解
import akka.actor.{ ActorRef, ActorSystem, Props, Actor, Inbox }
import scala.concurrent.duration._
case object Greet
case class WhoToGreet(who: String)
case class Greeting(message: String)
class Greeter extends Actor {
var greeting = ""
def receive = {
case WhoToGreet(who) => greeting = s"hello, $who"
case Greet => sender ! Greeting(greeting) // Send the current greeting back to the sender
}
}
這尤其是位:
def receive = {
case WhoToGreet(who) => greeting = s"hello, $who"
case Greet => sender ! Greeting(greeting) // Send the current greeting back to the sender
}
現在我想這種情況下,語法斯卡拉看起來是這樣的:
something match {
case "val1" => println("value 1")
case "val2" => println("value 2")
}
如果我嘗試複製使用情況在斯卡拉REPL這樣的問題:
def something = {
case "val1" => println("value 1")
case "val2" => println("value 2")
}
我得到
error: missing parameter type for expanded function
The argument types of an anonymous function must be fully known. (SLS 8.5)
究竟是什麼意思?
UPDATE:這篇文章是迄今爲止最好的回答我的問題:http://blog.bruchez.name/2011/10/scala-partial-functions-without-phd.html
那麼我明白,用'匹配'它的工作原理,但我的問題仍然存在 - 爲什麼它沒有'匹配'的Akka示例工作?我找不到任何在線語法的參考。 – Caballero
對不起,我完全錯過了你正在尋求澄清。編輯在一個答案:) – Damiya
@Caballero它與'receive'一起工作的原因是因爲你重寫它,並且父類型'Actor'定義了函數的類型,它是'PartialFunction ...'。要定義您自己的部分函數,您只需定義正確的返回類型(PartialFunction)。有關示例,請參閱文檔:http://www.scala-lang.org/api/2.10.3/index.html#scala.PartialFunction –