gpt4 book ai didi

Scala简单类设计

转载 作者:行者123 更新时间:2023-12-02 04:43:33 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