【发布时间】:2011-10-13 06:51:49
【问题描述】:
我正在 scala 中实现一个基于演员的应用程序,并且我试图能够在演员之间传递函数,以便仅在演员收到某些消息时才对其进行处理。
import actors.Actor
import java.util.Random
import scala.Numeric._
import Implicits._
class Constant(val n:Number) extends Actor{
def act(){
loop{
receive{
case "value" => reply( {n} )
}
}
}
}
class Arithmetic[T: Numeric](A: ()=>T, B: ()=>T) extends Actor{
def act(){
receive{
case "sum" => reply ( A() + B() )
/* case "mul" => reply ( A * B )
*/
}
}
}
object Main extends App{
val c5 = new Constant(5)
c5.start
val a = new Arithmetic({c5 !! "value"}, {c5!!"value"} )
a.start
println(a!?"sum")
println(a!?"mul")
}
在上面的示例代码中,我希望输出为 5+5 和 5*5。问题是回复不是一个类型化的函数,因此我无法让运算符 (+,*) 对 A 和 B 的结果进行操作。
您能否就如何更好地设计/实施此类系统提供任何帮助?
编辑:更新代码以更好地反映问题。错误: 错误:找不到数值类型的证据参数的隐式值[Any] val a = new Arithmetic({c5 !! "value"}, {c5!!"value"} )
每当我调用它时,我都需要能够传递要在actor中评估的函数。此示例使用静态值,但我以后将使用动态值,因此,传递值不会解决问题。此外,我希望接收不同的 var 类型(Int/Long/Double)并且仍然能够使用相同的代码。
【问题讨论】:
标签: function generics scala parameters actor