为什么scala:_ *将Seq扩展为可变长度参数列表在这种情况下不起
发布时间:2020-12-16 10:03:55 所属栏目:安全 来源:网络整理
导读:为什么 scala:_ *将Seq扩展为可变长度参数列表在这种情况下不起作用? 以及如何优雅地解决它? import java.sql.Connectionimport scalikejdbc.ConnectionPoolimport anorm.{SQL,SqlQuery,SqlRow,Row}object AnormExample extends App { Class.forName("org
为什么
scala:_ *将Seq扩展为可变长度参数列表在这种情况下不起作用?
以及如何优雅地解决它? import java.sql.Connection import scalikejdbc.ConnectionPool import anorm.{SQL,SqlQuery,SqlRow,Row} object AnormExample extends App { Class.forName("org.hsqldb.jdbc.JDBCDriver") ConnectionPool.singleton("jdbc:hsqldb:mem:hsqldb:WithAnorm","","") implicit val conn: Connection = ConnectionPool.borrow() // this works SQL("insert into emp (id,name) values ({id},{name})").onParams(3,"name3").executeUpdate() // this does not compile val row = Seq(4,"name4") SQL("insert into emp (id,{name})").onParams(row:_*).executeUpdate() // david } 错误: scala: type mismatch; found : Seq[Any] required: Seq[anorm.ParameterValue[?]] SQL("insert into emp (id,{name})").onParams(row:_*).executeUpdate() // david PS: <dependency> <groupId>play</groupId> <artifactId>anorm_2.10</artifactId> <version>2.1.1</version> </dependency> <dependency> <groupId>com.github.seratch</groupId> <artifactId>scalikejdbc_2.10</artifactId> <version>1.5.1</version> </dependency> <dependency> <groupId>org.hsqldb</groupId> <artifactId>hsqldb</artifactId> <version>2.2.9</version> </dependency> 优雅的解决方案? 更新 根据senia的回答,这解决了这个问题: def toParameterValueSet(seq: Seq[Any]) = seq.map(v => v: anorm.ParameterValue[_]) val row = Seq(5,"name5") SQL("insert into emp (id,{name})").onParams(toParameterValue(row):_*).executeUpdate() 有没有办法消除声明/使用toParameterValueSet的需要? (例如,告诉scala在自动扩展上使用隐式转换:_ *) 更新 更紧凑: implicit def toParameterValueSet(seq: Seq[Any]): Seq[anorm.ParameterValue[_]] = seq.map(v => v: anorm.ParameterValue[_]) val row = Seq(5,{name})").onParams(row:_*).executeUpdate() @Typesafe团队:您是否可以在acrom SQL上添加一个参数来获取一系列值? 解决方法
你可以试着替换
val row = Seq(4,"name4") 同 val row = Seq[anorm.ParameterValue[_]](4,"name4") 所有类型都有隐式转换,因此您可以使用row.map转换集合{e => e:anorm.ParameterValue [_]} (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |