Kafka的scala语法

cvxl0en2  于 2021-06-05  发布在  Kafka
关注(0)|答案(1)|浏览(262)

我正在阅读kafka.core.log.logsegment类的源代码。scala的语法给了我很大的困惑。我知道如果我能系统地学习scala,我可以说得很清楚,但我只是没有太多的时间来完成我的项目。
方法定义:

@volatile private var _maxTimestampSoFar: Option[Long] = None//**#pos 0 constructor??**
  def maxTimestampSoFar_=(timestamp: Long): Unit = _maxTimestampSoFar = Some(timestamp)//**definition 1**
  def maxTimestampSoFar: Long = {//**definition2**
    if (_maxTimestampSoFar.isEmpty)
      _maxTimestampSoFar = Some(timeIndex.lastEntry.timestamp)
    _maxTimestampSoFar.get
  }

它们被称为:

if (largestTimestamp > maxTimestampSoFar) {//**#pos 3.getter**
        maxTimestampSoFar = largestTimestamp//**#pos4 set the value?**
        offsetOfMaxTimestampSoFar = shallowOffsetOfMaxTimestamp
      }

让我困惑的是:
这种方法的标识符后面有一个额外的“\”的用法是什么 maxTimestampSoFar_ . 当我检查定义1和定义2的用法时,出现了重叠,从中我可以得出结论,它们就像重载twins一样被视为同一个方法?但是既然它们有不同的参数,为什么我们需要在标识符上有所不同?
至于方法调用的位置,我的理解正确吗?位置4是调用方法定义1的地方吗?然后参数的参数就通过使用“=”?
如果第二个假设是正确的,那么在上面的位置0,它是选项的构造函数的调用吗?这就像调用默认构造函数?
希望有人能帮我。谢谢你。

jaxagkaj

jaxagkaj1#

方法名也包含等号,所以 maxTimestampSoFar_= . 这就是在scala中定义setter的方式(参见scala getter/setter-最佳实践?)
是的,位置4中的赋值将调用位置1中定义的方法 Option[Long] 可以包含 None 或者 Some(<long value>) ,代码中的位置0用值初始化变量 None

相关问题