我有这种情况(精简到基本部分)
class Foo[L <: HList](columns: L) {
class toRecord(row: Row) extends Poly1 {
implicit def caseColumn[T] = at[Column[T]] { /* map to a record field */ }
}
def asRecord = {
val resultSet: Stream[Row] = // computation to get result set
resultSet.map { row =>
val m = new toRecord(row) // this can't work
columns.map(m)
}
}
}
这不起作用,因为map
需要一个稳定的标识符而m
不是。所以我需要Poly1 singleton objects
在结果集中有尽可能多的行。
这是此处讨论的相同问题:https ://groups.google.com/forum/#!topic/shapeless-dev/P5DXRgnzqkY ,但我找不到使这项工作的方法。
在链接的讨论中,Miles Sabin 提出了 a fold
with aPoly2
而不是 a map
with a Poly1
,但我不知道如何在我的案例中使用这个建议。