我正在尝试为函数类型()=> Unit定义类型,我将这个签名大量用于清理回调函数,并且我想给它们提供更有意义的名称。
我尝试了以下方法,我认为这应该是正确的语法,但不能编译:
package myPackage
import stuff
type CleanupCallback = () => Unit
trait myTrait ...
class mObject ...
为什么不编译?正确的语法是什么?
编译错误为:预期的类或对象定义
答案 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
// ...
}