【发布时间】:2012-12-18 06:31:07
【问题描述】:
我正在阅读一本关于 Scala Actors 的书,但我遇到了一些语法问题。在实践中,我倾向于这样分配我的变量和函数定义:
val v: String = "blahblahblah"
def f(n: Int): Int = n+1
在其名称后包括项目的(返回)类型。虽然我知道这不是必需的,但我已经习惯了这种约定,并发现它使我自己更容易理解代码。 话虽如此,请注意以下示例:
class Server extends Actor {
def act() = {
while (true) {
receive {
case Message(string) => reply("Good,very good.")
}
}
}
}
def sendMsg(m: Message, s: Server): Future[String] = {
s !! m
}
上面的代码在编译时产生错误,抱怨服务器返回了 Future[Any],而不是 Future[String]。我知道可以通过从 sendMsg 中删除返回类型来规避这个问题:
def sendMsg(m: Message,s: Server) = s !! m
但是,这不符合我的风格。有没有一种方法可以指定服务器生成的 Future 类型(而不是 Future[Any])?
【问题讨论】:
-
在
Akka中,只需在ask之后调用.mapTo[Int](!!在您的代码中是ask),这会将Future[Any]显式转换为Future[String]。我确定您的演员/Future-s 存在相同的方法 -
另一个相关的SO问题可以找到here