gpt4 book ai didi

scala - 如何为多个 Scala 版本和差异依赖项组织代码

转载 作者:行者123 更新时间:2023-12-03 16:02:49 28 4
gpt4 key购买 nike

我想要 2.12 和 2.13 Scala 版本的发布库。但这取决于另一个库,该库仅适用于 2.12。对于 2.13,我为 fast 编写了我的实现功能:

2.12 代码看起来:

import com.dongxiguo.fastring.Fastring.Implicits._ //2.12 only

object Lib {
val a = fast"hello world"
}

2.13 代码看起来:
import mycompat.Implicits._ //2.13 only

object Lib {
val a = fast"hello world" //my implementation
}

所以差异 - 只有 import ...在几个文件中。

我无法理解如何为不同的 Scala 版本组织代码。

最佳答案

使用不同的导入是有问题的,因为这意味着您有不同的来源(并且您需要维护它们)。我认为在它自己的原始包中提供缺少的库实现将是更好的解决方案。

//main/scala-2.13/com/dongxiguo/fastring/Fastring/Implicits.scala
package com.dongxiguo.fastring.Fastring
object Implicits {
//your implementation of fast"Something"
}

只要在 scala-2.13文件夹,它将被编译并仅用于 scala-2.13。

您还需要 2.12 和 2.13 版本的不同依赖项:

libraryDependencies ++= {
CrossVersion.partialVersion(scalaVersion.value) match {
case Some((2, 12)) => Seq("com.dongxiguo" %% "fastring" % "1.0.0")
case Some((2, 13)) => Seq()
case _ => Seq()
}
}

您将拥有相同的 Lib scala 2.13 和何时实现没有任何变化 fastring将为新的 Scala 版本发布您只需删除这些部分。

您还可以创建自己的代理对象,该对象将在 mycompat.Implicits._ 中对 2.12 和 2.13 具有不同的实现。 .

//main/scala-2.13/mycompat/Implicits.scala
package com.mycompat
object Implicits { /* proxy to fast"Something" from fastring library */ }

//main/scala-2.12/mycompat/Implicits.scala
package com.mycompat
object Implicits { /* your implementation of fast"Something" */ }

这也是个好主意。

关于scala - 如何为多个 Scala 版本和差异依赖项组织代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60740092/

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