【问题标题】: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 方法实现相同的效果。