Scala синтаксис в Кафке - PullRequest
       9

Scala синтаксис в Кафке

0 голосов
/ 27 апреля 2020

Я читаю исходный код класса 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
      }

То, что меня смущает, можно заключить в следующем:

  1. Что такое использование такого метода с дополнительным «_» после идентификатора метода, подобного следующему: maxTimestampSoFar_. Когда я проверил использование определения 1 и определения 2, возникают совпадения вхождений, из чего можно сделать вывод, что они рассматриваются как один и тот же метод, как перегруженные близнецы? Но поскольку у них разные параметры, зачем нам разница в идентификаторе?
  2. Что касается места, где вызывается метод, верно ли мое понимание? Является ли pos 4 местом, где вызывается определение 1 метода? Затем аргумент параметра передается просто с помощью "="?
  3. Если второе предположение верно, то в позиции выше 0, это вызов конструктора Option? Это похоже на вызов конструктора по умолчанию?

Надеюсь, кто-нибудь может мне помочь. Цени это.

1 Ответ

2 голосов
/ 27 апреля 2020
  1. Имя метода содержит также знак равенства, как и maxTimestampSoFar_=. Вот как определены сеттеры в Scala (см. Scala getters / setters - лучшая практика? )
  2. Да, то, что выглядит как назначение в позиции 4, вызовет определенный метод в 1
  3. Option[Long] может содержать None или Some(<long value>), pos 0 в коде инициализирует переменную значением None
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...