我试图使用可堆叠的特征模式创建一个简单的特征来拦截来自任意参与者的已接收消息。但是,在创建Props
时,Props(new A with B)
与Props[A with B]
不同。即,第一种变体起作用但不起作用。区别在哪里?
一个最小的例子:https://gist.github.com/ale64bit/df496ec2a43d0ec2ddb3
谢谢!
答案 0 :(得分:3)
我不确定该行为背后的确切原因,但似乎使用参数化版本不知道如何构造请求类型并简单地构造主要类型。即当你打印出你得到的演员里面的实际课程时
Props(new FooActor with Interceptor) => Main$$anonfun$1$$anon$1
Props[FooActor with Interceptor] => FooActor
我最好的猜测是,ClassTag
生成的ClassTag
或构建器不理解参数化FooActor with Interceptor
语法。但是,如果您之前创建了一个混合了这两个类的新类,它确实有效:
class FooActorWithInterceptor extends FooActor with Interceptor
Props[FooActorWithInterceptor] => FooActorWithInterceptor
顺便说一句,我发现被多次咬了,应该避免使用参数化的Props版本。虽然它适用于无参数构造函数版本,但是您是否应该在构造函数中添加一些参数Props[A]
在编译时不会抱怨。同时Props(new A)
会给你一个编译错误。