gpt4 book ai didi

Scala简单类设计

转载 作者:行者123 更新时间:2023-12-02 21:41:52 24 4
gpt4 key购买 nike

我想要一个在概念上包含三部分信息的对象类型:

  1. 字符串
  2. 将字符串映射到字符串的字典(Scala 映射)
  3. 可以是“单词”或“标点符号”的类型

尽管很重要,但该对象类型应该是保存文本文档内容的基础 - 通过拥有它的可迭代实例。

我目前将其实现为一个类层次结构,其中第一个类包含 1 和 2,然后有两个类继承它,一个称为“word”,另一个称为“punctuation”,如下所示:

abstract class TextElement(initContent: String, initStyleMap: Map[String, String]) {
val content : String = initContent
val styleMap: Map[String, String] = initStyleMap
}

case class Word(initContent: String, initStyleMap: Map[String, String]) extends TextElement(initContent: String, initStyleMap: Map[String, String]) {

}

case class Punctuation(initContent: String, initStyleMap: Map[String, String]) extends TextElement(initContent: String, initStyleMap: Map[String, String]) {

}

我想知道是否有比我刚刚描述的第一直觉更适合的东西,因为 Scala 中可能有更精简或更干净的方法。

值得注意的是,我将拥有这些对象的数千个实例,因此内存占用以及对数据的快速访问非常重要。我的天真的实现感觉有点样板式,而且,也许还有其他我忽略的方法。

所以我想知道是否有一种可行的不同于这种直观方法的方法,它可能有任何好处。 另外上面的代码是否可以变得更优雅/简洁一点

最佳答案

您可以使用trait而不是抽象类来减少代码:

sealed trait TextElement {
def content: String
def styleMap: Map[String, String]
}

case class Word(content: String, styleMap: Map[String, String]) extends TextElement
case class Punctuation(content: String, styleMap: Map[String, String]) extends TextElement

sealed keyword允许编译器检查匹配是否详尽。

关于Scala简单类设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20312806/

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