gpt4 book ai didi

scala - 我应该如何在我的 Scala 应用程序中组织隐式?

转载 作者:行者123 更新时间:2023-12-04 02:21:57 25 4
gpt4 key购买 nike

编写了一些 Scala 工具后,我正在尝试掌握安排我的代码的最佳方式 - 特别是隐式。我有两个目标:

  • 有时,我希望能够只导入我要求的隐式。
  • 其他时候,我只想导入所有内容。

  • 为了避免重复隐式,我想出了这个结构(类似于 scalaz 的排列方式):
    case class StringW(s : String) {
    def contrived = s + "?"
    }

    trait StringWImplicits {
    implicit def To(s : String) = StringW(s)
    implicit def From(sw : StringW) = sw.s
    }

    object StringW extends StringWImplicits

    // Elsewhere on Monkey Island

    object World extends StringWImplicits with ListWImplicits with MoreImplicits

    这让我可以
    import StringW._ // Selective import

    或(在大多数情况下)
    import World._. // Import everything

    其他人是如何做到的?

    最佳答案

    我认为implicit如果您不知道它们来自哪里,则转换是危险的。就我而言,我把我的 implicit s 在 Conversions类(class)和 import它尽可能接近使用

    def someMethod(d: Date) ; Unit {
    import mydate.Conversions._
    val tz = TimeZone.getDefault
    val timeOfDay = d.getTimeOfDay(tz) //implicit used here
    ...
    }

    我不确定我是否喜欢从各种 trait 中“继承”隐含信息出于同样的原因,它被认为是 糟糕的 Java 实践 实现 interface所以你可以直接使用它的常量(静态导入是首选)。

    关于scala - 我应该如何在我的 Scala 应用程序中组织隐式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1269791/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com