模式匹配scala中的零参数函数:通过警告神秘化

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:Unitreact是警告,免费的,但实际上是不匹配传入的任务.)

使用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)