gpt4 book ai didi

scala - "Modular"Scala 指南

转载 作者:行者123 更新时间:2023-12-03 22:31:58 25 4
gpt4 key购买 nike

最近我对如何组织我的 Scala 代码感到困惑,因为有很多选择。

Scala 如何/何时使用包、对象、包对象来组织代码是否有任何指导方针?

最佳答案

了解 Scala 的功能
首先,我们需要了解每种模块化策略的能力和局限性。
套餐
这些工作就像在 Java 中一样。您可以使用多个文件来声明一个包的不同部分,并且可以嵌套很多层。这为您的布局提供了最大的灵 active 。然而,由于默认的类加载器只希望在包中找到类和接口(interface),这就是 Scala 让你放在那里的全部。 (类、特征和对象。)
对象
对象可以包含任何东西——方法、字段、其他对象、类、特征等。子类、特征和对象实际上是它们自己的独立实体,包含对象作为名称损坏的前缀(就 JVM 而言)。一个对象必须完全包含在一个文件中,尽管您可以任意深度地嵌套子类,但这是通过修改越来越长的名称来完成的,而不是添加到类加载器的路径中。
封装对象
只有对象和包的问题是您可能需要一个嵌套结构:

scala.xml
scala.xml.include
scala.xml.include.sax
所以你需要使用包(以避免拥有一个巨大的文件和令人不安的长类名)。但你也可能想要
import scala.xml._
使您可以使用各种常量和隐式转换,以便您需要使用对象。 Package objects前来救援;它们本质上与普通物体相同,但是当您说
import scala.xml._
您将获得包中的所有内容( scala.xml._)以及相应包对象( scala.xml.package)中的所有内容。
如何模块化你的代码
现在我们知道每个部分是如何工作的,对于如何组织有相当明显的规则:
  • 将相关代码打包
  • 如果有很多相关的子部件,请将它们放入子包
  • 如果包需要隐式或常量,请将它们放入该包的包对象中
  • 如果您的包层次结构有一个终端分支,您可以选择它是对象还是包对象。包对象不允许做一些事情(尽管列表一直在变小——我不确定除了禁止在包中隐藏其他名称之外还有什么),所以一个常规对象可能成为更好的选择。只要您不担心二进制兼容性,以后很容易改变主意--只需更改objectpackage object大多数情况下。
  • 关于scala - "Modular"Scala 指南,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6830534/

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