Функция без переменной в scala - PullRequest
1 голос
/ 27 марта 2020

У меня есть функция, которая принимает строку и класс case в качестве входных данных и возвращает строку в качестве выходных данных.

В список добавляется другой класс case, и возвращается окончательный класс case, у которого есть список.

Я хочу сделать это без использования var. Список val будет неизменным, и к нему не будет добавлено никаких данных. Есть ли другой способ сделать это Scala способом?

def getResult(eventName: Option[String], content: Content): String = {
  var list = List.empty[Json]
  val device = Device(
      DEVICE_SCHEMA,
      data = content.data.device
    )
  list = list :+ device.asJson

  val parser = Parser(
      PARSER_SCHEMA,
      data = content.data.parser
    )
  list = list :+ parser.asJson
  val res = Result(
      RESULT_SCHMEA,
      data = list
    )
  res.asJson.noSpaces
}

Ответы [ 3 ]

3 голосов
/ 27 марта 2020

Попробуйте создать встроенный список так:

def getResult(eventName: Option[String], content: Content): String = {
  val device = Device(
    DEVICE_SCHEMA,
    data = content.data.device
  )
  val parser = Parser(
    PARSER_SCHEMA,
    data = content.data.parser
  )
  Result(
    RESULT_SCHMEA,
    data = List(device.asJson, parser.asJson)  // <== inline list creation
  ).asJson.noSpaces
}
0 голосов
/ 02 апреля 2020

Еще один способ сделать это более кратким, но, возможно, менее читабельным

def getResult(eventName: Option[String], content: Content): String =
  Result(
    RESULT_SCHMEA,
    data = List(
      Device(
        DEVICE_SCHEMA,
        data = content.data.device
      ), 
      Parser(
        PARSER_SCHEMA,
        data = content.data.parser
      )
    ).map(_.asJson)
  ).asJson.noSpaces
0 голосов
/ 27 марта 2020

Просто несколько небольших изменений по сравнению с предыдущим ответом.
Вам не нужно val res, и предпочтительно создать список за пределами Result для удобства чтения и последующей отладки:

def getResult(eventName: Option[String], content: Content): String = {
  val device = Device(
    DEVICE_SCHEMA,
    data = content.data.device
  )
  val parser = Parser(
    PARSER_SCHEMA,
    data = content.data.parser
  )

  val jsons = List(device.asJson, parser.asJson)
  Result(
    RESULT_SCHMEA,
    data = jsons
  ).asJson.noSpaces
}
...