Rocket-chip中Config.scala内Scala代码的4个this含义咨询
解读Field类中四个this的含义
先看你给出的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 }
下面逐个解释四个this的作用:
- 第1个this:这是Scala里辅助构造方法的声明标记。
def this()表示定义一个无参的辅助构造器,作为Field类的额外创建入口。 - 第2个this:这里的
this(None)是直接调用Field类的主构造方法(也就是类定义行的abstract class Field[T] private (val default: Option[T])),传入None作为主构造器需要的Option[T]类型参数。 - 第3个this:和第1个一样,是另一个辅助构造方法的声明,这个构造器接收一个
T类型的参数,目的是给使用者提供更便捷的创建方式,不用手动把值封装成Option。 - 第4个this:同样是调用主构造方法,把传入的
T类型参数用Some包装成Option[T]后,传递给主构造器完成初始化。
额外说明:这里的this和你疑惑的自类型完全无关,自类型是用this: 类型 =>这种语法声明的,而这段代码里的this全都是构造方法相关的声明或调用。另外主构造方法被private修饰,外部无法直接调用,必须通过这两个辅助构造器间接使用,这样能让API更友好——使用者要么不传参数(默认用None),要么传具体值(自动包装成Some)。
内容的提问来源于stack exchange,提问作者astrohan
相关产品推荐
相关产品推荐

