gpt4 book ai didi

Scala 对特征的命名约定

转载 作者:行者123 更新时间:2023-12-03 10:40:25 27 4
gpt4 key购买 nike

假设我有一个 trait在斯卡拉

trait Connection {

def init(name: String)
def dispose
}

我想创建一个实现它的类。但我想将其命名为 Connection还:
class Connection extends Connection {
// ....
}

这是行不通的。当然,我可以命名 trait有所不同,但事实证明,Scala 中的命名约定说我应该将 trait 命名为普通类,这意味着没有任何前缀,我将在 C# 中使用它( IConnection 其中 IConnection 将是 interface )。

在这种特殊情况下, Connection 的名称对于 classtrait更合适。

还是我错过了 Scala 命名约定中的某些内容?

最佳答案

您将通用 API 提取到 Connection 中的事实trait 本身意味着它将有多个特定的实现。这些实现当然会与一些更具体的实体相关,例如MySQL 或 H2 数据库。

根据您选择的应用架构,有几种方法可以解决您的问题:

  • 如果您将特定实现保留在同一个命名空间中,您将获得:
  • myApp.Connection
  • myApp.MySqlConnection
  • myApp.H2Connection
  • 但由于名称冗余(*Connection 部分),实际上不鼓励上述内容,建议引入新包,例如:
  • myApp.Connection
  • myApp.connections.MySql
  • myApp.connections.H2

  • 或者
  • myApp.Connection
  • myApp.Connection.MySql
  • myApp.Connection.H2

  • 如果您选择将特定实现放在 Connection 的伴随对象中.
  • 在更高级的架构方法中,您最终会得到具有私有(private)包的特定实现:
  • myApp.Connection
  • myApp.mySql.Connection
  • myApp.h2.Connection

  • 即使在这里,虽然你有 Connection由于使用限定引用( myApp.Connection )或限定导入位于不同包中的类型,名称冲突很容易解决:
    import myApp.{Connection => GeneralConnection} //or IConnection if you insist

    关于Scala 对特征的命名约定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17121773/

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