我需要使用已在文件中的对象中定义的隐式排序
abc
以下列方式:
object abc{
implicit def localTimeOrdering: Ordering[LocalDate] = Ordering.fromLessThan(_.isBefore(_))
}
所以,我创建了一个包对象
XYZ
在文件'package.scala'中,而'package.scala'又在包'xyz'中,该文件包含我需要隐式排序的文件。我写的是这样的:
package object xyz{
import abc._
}
它似乎不起作用。如果我在包对象中手动编写隐式定义语句,它就可以完美地工作。导入对象(abc)的正确方法是什么,以便可以在我的整个包'xyz'中使用它的所有对象/类/定义?
答案 0 :(得分:3)
您无法以这种方式导入implicit
次转化,您必须:
手动将它们写在对象中:
package obj {
implicit def etc//
}
或者通过继承/ mixins获取它们:
package obj extends SomeClassOrTraitWithImplicits with AnotherTraitWithImplicits {
}
出于这个原因,您通常会在implicit
或traits
定义中定义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.
}