Kafka中的Scala语法

问题描述 投票:0回答:1

我正在阅读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
      }

令我感到困惑的结论如下:

  1. 在这种方法的标识符之后,maxTimestampSoFar_后面带有一个额外的“ _”,这种方法的用法是什么。当我检查定义1和定义2的用法时,出现重叠,从中可以得出结论,它们像过载双胞胎一样被视为相同的方法?但是由于它们具有不同的参数,为什么我们需要标识符有所不同?
  2. 至于该方法的调用位置,我的理解正确吗?位置4是调用方法定义1的地方吗?然后,仅使用“ =”?
  3. 传递参数的参数
  4. 如果第二个假设是正确的,则在pos 0以上,它是Option的构造函数的调用吗?这就像调用默认构造函数一样?

希望任何人都可以帮助我。对此表示赞赏。

scala apache-kafka syntax functional-programming
1个回答
0
投票
  1. [方法名也包含等号,maxTimestampSoFar_=也是如此。这就是在Scala中定义设置器的方式(请参阅Scala getters/setters - best practice?
  2. 是的,在pos 4中看起来像一个赋值将调用在1中定义的方法
  3. [Option[Long]可以包含NoneSome(<long value>),代码中的pos 0初始化值为None的变量
© www.soinside.com 2019 - 2024. All rights reserved.