Scala 优化可选字符串解析
Scala optimizing optional string parsing
我们需要根据案例 class 创建一个请求查询字符串。案例 class 包含可选属性:
case class Example(..., str: Option[String], ..)
如果选项存在,我们想创建一个查询参数,否则不创建查询参数。喜欢:
match example.str {
case Some(s) => s"¶m_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("")("¶m_str=" + _)
如果你有多个参数,你可以试试这个:
List(
str1.map("¶m1_str=" + _),
str2.map("¶m2_str=" + _),
str3.map("¶m3_str=" + _)
).flatten.mkString(" ")
我们需要根据案例 class 创建一个请求查询字符串。案例 class 包含可选属性:
case class Example(..., str: Option[String], ..)
如果选项存在,我们想创建一个查询参数,否则不创建查询参数。喜欢:
match example.str {
case Some(s) => s"¶m_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("")("¶m_str=" + _)
如果你有多个参数,你可以试试这个:
List(
str1.map("¶m1_str=" + _),
str2.map("¶m2_str=" + _),
str3.map("¶m3_str=" + _)
).flatten.mkString(" ")