【问题标题】:Scala syntax question in Rocket-chip config.scalaRocket-chip config.scala 中的 Scala 语法问题
【发布时间】:2022-11-30 05:09:39
【问题描述】:

刚刚了解标量是为了研究火箭芯片。
我在Rocket-chip的Config.scala看到一些奇怪的代码

abstract class Field[T] private (val default: Option[T])
{
   def this() // 1st-this
              = this(None) // 2nd-this
   def this(default: T) // 3rd-this
              = this(Some(default)) // 4th-this
}

上面的代码有4个这个.我认为第二/第四-这个是相同的。
但我不确定第二/第四-这个是代表场地类自类型与否。 如果他们是自我型的,第一/第三-这个是什么?? 我很沮丧,因为我无法分辨以上四个的定义这个. 你能解释一下吗?

【问题讨论】:

    标签: scala chisel rocket-chip


    【解决方案1】:

    这些被称为辅助构造函数(参见https://docs.scala-lang.org/scala3/book/domain-modeling-tools.html#classes)。

    “主构造函数”是由类声明定义的:

    class Field[T] private (val default: Option[T])
    

    有了这个,您可以仅通过传递 Option[T] 来创建 Field 的实例。喜欢Field(None)Field(Some(...))


    然后,您有 2 个额外的辅助构造函数。它们被定义为常规方法,但它们需要被称为this

    下面添加一个不接受任何参数的构造函数,以便您可以使用Field()创建实例,它将与Field(None)相同。第二个this 指的是主构造函数。

    def this() = this(None)
    

    其他辅助构造函数的原理相同,允许调用 Field(x) 而不是 Field(Some(x))


    请注意,您可以使用伴随对象中的 apply 方法实现相同的效果。

    【讨论】:

    • 感谢您提供简单的解释和链接!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-05
    • 2020-02-11
    • 1970-01-01
    • 2018-02-20
    • 1970-01-01
    相关资源
    最近更新 更多