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