Scala导入包的所有文件中的文件

时间:2013-11-12 09:50:00

标签: scala import

我需要使用已在文件中的对象中定义的隐式排序

abc

以下列方式:

object abc{
implicit def localTimeOrdering: Ordering[LocalDate] = Ordering.fromLessThan(_.isBefore(_))
}

所以,我创建了一个包对象

XYZ

在文件'package.scala'中,而'package.scala'又在包'xyz'中,该文件包含我需要隐式排序的文件。我写的是这样的:

package object xyz{
import abc._
}

它似乎不起作用。如果我在包对象中手动编写隐式定义语句,它就可以完美地工作。导入对象(abc)的正确方法是什么,以便可以在我的整个包'xyz'中使用它的所有对象/类/定义?

1 个答案:

答案 0 :(得分:3)

您无法以这种方式导入implicit次转化,您必须:

手动将它们写在对象中:

package obj {
   implicit def etc//
}

或者通过继承/ mixins获取它们:

package obj extends SomeClassOrTraitWithImplicits with AnotherTraitWithImplicits {
}

出于这个原因,您通常会在implicittraits定义中定义class次转化,这样您就可以使用单个package object进行批量导入。

通常的模式是为每种情况定义帮助trait

trait SomeClass {
   // all the implicits here
}
object SomeClass extends SomeClass {}

这样做可以让你:

package object abc extends SomeClass with SomeOtherClass with AThirdClass {
// all implicits are now available in scope.
}