Scala оптимизирует необязательный разбор строк - PullRequest
0 голосов
/ 24 января 2019

Нам нужно создать строку запроса, из класса case. Класс case содержит необязательные атрибуты:

case class Example(..., str: Option[String], ..)

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

match example.str {
  case Some(s) => s"&param_str=$s"
  case _ => ""
}

так как это появляется во многих местах, я хочу, чтобы оно стало более общим:

def option2String(optionString: Option[String], template: String) = {
optionString match {
  case Some(str) => template.replaceAll("\\$str", str)
  case _ =>  ""
}

Но я думаю, что это можно сделать более элегантно или идиоматически, например, с call-by-name arguments?

1 Ответ

0 голосов
/ 24 января 2019

Я бы использовал fold

example.str.fold("")("&param_str=" + _)

Если у вас есть несколько параметров, вы можете попробовать это:

List(
  str1.map("&param1_str=" + _),
  str2.map("&param2_str=" + _),
  str3.map("&param3_str=" + _)
).flatten.mkString(" ")
...