【发布时间】:2012-05-31 03:08:33
【问题描述】:
我正在开发一个简单的函数,它应该基于可能不存在的可选参数构建一个 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 ") + " "
}
【问题讨论】:
标签: scala collections coding-style