1

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

abc

通过以下方式:

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

所以,我做了一个包对象

xyz

在文件“package.scala”中,该文件又在包“xyz”中,其中包含我需要隐式排序适用的文件。我写这样的东西:

package object xyz{
import abc._
}

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

4

1 回答 1

3

您不能implicit以这种方式导入转换,您必须:

手动将它们写入对象内:

package obj {
   implicit def etc//
}

或者通过继承/混合获得它们:

package obj extends SomeClassOrTraitWithImplicits with AnotherTraitWithImplicits {
}

出于这个原因,您通常在或定义中定义您的implicit转换,这样您就可以使用单个.traitsclasspackage 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.
}
于 2013-11-12T10:11:16.727 回答