我正在开发一个简单的函数,它应该基于可能不存在的可选参数构建一个 sql 条件。
我正在尝试使用不可变值以及优雅和惯用的方式来完成它。
到目前为止,我带来了这样的东西:
val cond: Seq[String] = Nil ++
(if (entity != "*") Seq("entity = {entity}") else Nil) ++
(if (name != "*") Seq("name = {name}") else Nil) ++
val condition =
if (cond.size == 0) ""
else " where " + cond.mkString(" and ") + " "
所以,我只是合并 Seqs,如果该值不存在,我将它与 Nil 合并
使用 var 我得到类似的东西:
var cond: Seq[String] = Seq();
if (entity != "*") cond = cond :+ "entity = {entity}"
if (name != "*") cond = cond :+ "name = {name}"
我发现它更具可读性(我想知道第二种方法是否因为 var 而不是线程安全的)
我想知道解决此类问题的 scala 惯用且优雅的方法是什么
- 编辑
最后,我确定了这个实现:
val condition: String = {
var cond: Seq[String] = Seq();
if (entity != "")
cond = cond :+ "entity = {entity}"
if (filter != "")
cond = cond :+ """(name like {filter} or prev like {filter} or post like {filter})"""
if (cond.size == 0) ""
else " where " + cond.mkString(" and ") + " "
}