【问题标题】:Scala importing a file in all files of a packageScala在一个包的所有文件中导入一个文件
【发布时间】:2013-11-12 09:49:59
【问题描述】:

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

abc

通过以下方式:

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

所以,我制作了一个包对象

xyz

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

package object xyz{
import abc._
}

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

【问题讨论】:

    标签: scala import


    【解决方案1】:

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

    在对象中手动写入:

    package obj {
       implicit def etc//
    }
    

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

    package obj extends SomeClassOrTraitWithImplicits with AnotherTraitWithImplicits {
    }
    

    因此,您通常在traitsclass 定义中定义implicit 转换,这样您就可以使用单个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.
    }
    

    【讨论】:

    • 在您的回答基础上,将您的隐含在一个特征中总是一个好习惯,然后您可以让一个伴随对象扩展它:trait abc { implicit def ...}object abc extends abc。这样您就可以导入它:import abc._ 并将隐式混合到另一个类中:object obj extends abc。从而为您提供所需的所有灵活性。
    猜你喜欢
    • 1970-01-01
    • 2016-05-07
    • 1970-01-01
    • 2013-11-22
    • 2013-01-18
    • 2011-08-27
    • 1970-01-01
    • 2014-08-27
    • 2013-03-29
    相关资源
    最近更新 更多