我正在玩scala的分布式演员.非常好.
我有一个执行传入函数对象的服务器.例如,客户端有
object Tasks { def foo = {Console.println("I am Foo")}; def bar = {Console.println("I am Bar");} } // In client actor... ... server ! Tasks.foo _ ...
服务器可以选择这些并使用actor代码执行它们
react { case task:(()=>Unit) => task()
这一切都运行得很好(确实非常非常酷)但我scalac
对服务器代码输出的警告消息感到困惑:
warning: non variable type-argument Unit in type pattern is unchecked since it is eliminated by erasure case task:(()=>Unit) => ^
我该如何清除此警告?
(我上的区别不太清楚Unit
类型,以及()=>Unit
零参数的函数类型.只是想匹配task:Unit
的react
是警告,免费的,但实际上是不匹配传入的任务.)
使用Sun的Java6在Debian上使用Scala 2.7.5.
你真的很喜欢这个:
case task:Function0[Unit] => task()
由于擦除,Unit在运行时不可见.如果您真的不关心返回类型,可以在react块中执行此操作:
case task:Function0[_] => task()