gpt4 book ai didi

scala - 为什么 Scala API 有两种组织类型的策略?

转载 作者:行者123 更新时间:2023-12-04 23:08:44 24 4
gpt4 key购买 nike

我注意到 Scala 标准库使用两种不同的策略来组织类、特征和单例对象。

  • 使用其成员为导入的包。例如,这就是您访问 scala.collection.mutable.ListBuffer 的方式。 .这种技术很熟悉来自 Java、Python 等。
  • 使用特征的类型成员。例如,这就是您访问 Parser 的方式。类型。你首先需要混入scala.util.parsing.combinator.Parsers .这种技术来自 Java、Python 等并不熟悉,并且在第三方库中使用不多。

  • 我想 (2) 的一个优点是它同时组织了方法和类型,但是根据 Scala 2.8 的包对象,同样可以使用 (1) 来完成。为什么有这两种策略?每个应该什么时候使用?

    最佳答案

    此处注意的命名法是 path-dependent types .这就是你所说的选项 2,我只说它。除非你碰巧有一个问题被它解决了,否则你应该总是选择选项 1。

    你错过的是Parser类引用了 Parsers 中定义的东西类(class)。事实上,Parser类本身取决于什么input已在 Parsers 上定义:

    abstract class Parser[+T] extends (Input => ParseResult[T])

    型号 Input定义如下:
    type Input = Reader[Elem]

    Elem是抽象的。例如,考虑 RegexParsersTokenParsers .前者定义了 ElemChar ,而后者将其定义为 Token .这意味着 Parser因为每个都是不同的。更重要的是,因为 ParserParsers 的子类,Scala 编译器将确保在编译时您没有通过 RegexParsersParserTokenParsers或相反亦然。事实上,你甚至过不了 Parser RegexParsers 的一个实例到它的另一个实例。

    关于scala - 为什么 Scala API 有两种组织类型的策略?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5328589/

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