我有一个能够相当优雅地执行SQL存储函数的函数:它将参数作为List [ProcedureParameters]。 ProcedureParameters可以进入In,InOut或Out。
当我从程序中得到返回值时,我会像这样收集它们:
val results: List[Any] = for (parameter <- ps.parameters) yield {
index = index + 1
parameter match {
case Out(Types.BIGINT) => cs.getLong(index)
case Out(Types.INTEGER) => cs.getInt(index)
// Lots more SQL to Java specific mapping here...
}
}
这可以很好地迭代过程参数列表,如果有一个Out(或InOut)参数,它会得到值。
但如果不值,我会得到BoxedUnit
。
然后,results
列表会像这样回来:
列表(3007,(),(),(),(),(),(),0)
我尝试的第一件事是过滤掉BoxedUnit实例,但我似乎无法找到办法。由于BoxedUnit不是值... {/ p>,.filter(_ != BoxedUnit)
将无效
然后我开始研究修改我的for comprehension(或yield语句)的方法,所以它只产生“真实”值(也就是说,None或Some实例),但仍然坚持这一点。
任何建议都将深表感谢。谢谢!
答案 0 :(得分:3)
.filter(_ != (()))
BoxedUnit
是一个实际细节,显然已泄露在您的用例中。它是Unit
类型的JVM的具体化,因此它唯一的实例是我们知道的()
类型的唯一值Unit
。< / p>