Как обрабатывать аргументы во вспомогательных конструкторах перед вызовом первичных? - PullRequest
0 голосов
/ 06 ноября 2018

Я новичок в Scala и все еще сталкиваюсь с некоторыми новичками (?).

Итак, у меня есть класс с именем Transaction, основной конструктор которого имеет 5 аргументов. Дело в том, что я пытаюсь написать конструктор с 1 аргументом с аргументом String, чтобы он извлекал из него другие аргументы и вызывал с ними первичный конструктор (он в основном анализирует строку).

Я прочитал, что первый вызов внутри вспомогательного конструктора должен быть первичным конструктором, тогда как я должен вызывать его без полезных данных? Какой другой подход существует для решения этой проблемы?

Здесь я вставляю код класса и конструктор с ошибками:

class Transaction(srcIp: String, dstIp: String, var srcPort: Int, var dstPort: Int, _protocol: String) {
  def this(t_str: String) = {
    val t_arr = t_str.split(',')
    this(t_arr(1), t_arr(2), t_arr(3).toInt, t_arr(4).toInt, t_arr(5))
  }
  //primary constructor, private variables, etc
}

1 Ответ

0 голосов
/ 06 ноября 2018

Перегрузка конструктора Scala должна обязательно (и только) вызывать другой конструктор, основной или вспомогательный. Это связано с тем, что аргументы по умолчанию в Scala не вводили язык до Scala 2.8.

Если вы хотите «разобрать» вашу строку таким образом, вы можете создать сопутствующий объект (см. здесь ) и перегрузить метод apply для вызова основного конструктора (или любого из перегруженных вспомогательных объектов). конструкторы).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...