0

我正在尝试使用 Squeryl 为数据库编写一个快速数据浏览器,但我很难以通用方式遍历所有表。基于 Squeryl SchoolDb 示例,我尝试了以下操作:

  def browseTable(name: String) = {
     SchoolDb.tables.find(_.name == name) map { t=>
          val fields = t.posoMetaData.fieldsMetaData
          val rows = from (t) (s => select(s))
          // Print the columns
          println(fields.map(_.columnName).mkString("\t"))
          rows map { row =>
            println(fields.map(f => f.get(row)).mkstring("\t"))
          }
     } 

编译器对这种尝试不太满意(缺少“行”的类型类型),我可以理解它的困境。将参数显式声明为 Any 只会将编译错误更改为“f.get(row)”上的“No implicit view available from Any => org.squeryl.dsl.ast.TypedExpressionNode[_]”

如何解决此问题或更改模型(可能添加某种特征)以启用对所有表中所有数据的通用访问?

4

1 回答 1

1

编译器抱怨,因为f.get方法需要一个AnyRef参数。AFAIK,在 Scala 中,所有内容都可以安全地转换为AnyRef- 如果需要,编译器将强制进行必要的装箱。所以我认为这应该有效:f.get(row.asInstanceOf[AnyRef])

编辑:我刚刚测试过它并且它有效。

于 2013-08-24T13:59:38.823 回答