无法声明采用零参数的仿函数类型?

时间:2018-07-19 10:20:58

标签: scala

我正在尝试为函数类型()=> Unit定义类型,我将这个签名大量用于清理回调函数,并且我想给它们提供更有意义的名称。

我尝试了以下方法,我认为这应该是正确的语法,但不能编译:

package myPackage

import stuff

type CleanupCallback = () => Unit

trait myTrait ...

class mObject ...

为什么不编译?正确的语法是什么?

编译错误为:预期的类或对象定义

1 个答案:

答案 0 :(得分:2)

您不能在class/trait/object范围之外声明类型别名。但是您可以在 package对象中声明它,如下所示:

package object myPackage {
  type CleanupCallback = () => Unit
}

它对于myPackage中的所有类都是可见的。

还可以将其导入属于其他包的其他类中:

import myPackage.CleanupCallback 

trait MyTrait {
  def foo: CleanupCallBack
}

IDEA插件支持创建包对象,另一个版本是(假设您没有IDEA插件):

在包中创建文件package.scala。该文件必须包含:

package object packageName { // name must match with package name
  // ...
}