Я читаю исходный код класса kafka.core.log.LogSegment. Где синтаксис scala дает мне огромное замешательство. Я знаю, что мог бы прояснить, смогу ли я выучить scala систематическим c способом, но у меня просто не так много времени, так как мой проект ждет.
Определение методов:
@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, возникают совпадения вхождений, из чего можно сделать вывод, что они рассматриваются как один и тот же метод, как перегруженные близнецы? Но поскольку у них разные параметры, зачем нам разница в идентификаторе? - Что касается места, где вызывается метод, верно ли мое понимание? Является ли pos 4 местом, где вызывается определение 1 метода? Затем аргумент параметра передается просто с помощью "="?
- Если второе предположение верно, то в позиции выше 0, это вызов конструктора Option? Это похоже на вызов конструктора по умолчанию?
Надеюсь, кто-нибудь может мне помочь. Цени это.