Scala 优化可选字符串解析

Scala optimizing optional string parsing

我们需要根据案例 class 创建一个请求查询字符串。案例 class 包含可选属性:

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 _ =>  ""
}

但我认为它可以做得更优雅或 scala 惯用,可能与 call-by-name arguments?

我会用 fold

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

如果你有多个参数,你可以试试这个:

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