当前位置: 首页 > 知识库问答 >
问题:

Anorm中“对重载定义的歧义引用”的含义

上官飞
2023-03-14

我最近开始学习Scala和Play框架,在阅读Play框架的Anorm文档时,我得到了以下代码片段:

import anorm.SqlParser.str

val id: List[String] = 
  SQL("insert into City(name, country) values ({name}, {country})")
 .on('name -> "Cambridge", 'country -> "New Zealand")
 .executeInsert(str.+) // insertion returns a list of at least one string keys

却被编译错误卡住了:

package controllers
import play.api.Play.current
import javax.inject._
import play.api._
import play.api.mvc._
import play.api.db.{ Database, NamedDatabase, DB }
import anorm._
import anorm.SqlParser.str

@Singleton
class HomeController @Inject()() extends Controller { 

  def index = Action {
   DB.withConnection { implicit c =>
     val id: List[String] = 
       SQL("insert into City(name, country) values ({name}, {country})")
       .on('name -> "Cambridge", 'country -> "New Zealand")
       .executeInsert(str.+) // insertion returns a list of at least one string keys  
     Ok("Result is: " + id)
   }       
  }

}
libraryDependencies ++= Seq(
  jdbc,
  cache,
  ws,
  "org.scalatestplus.play" %% "scalatestplus-play" % "1.5.1" % Test,
  "com.typesafe.play" %% "anorm" % "2.5.0",
  "org.postgresql"     %  "postgresql" % "9.3-1102-jdbc41"
)

共有1个答案

漆雕令秋
2023-03-14

您没有使用.str,必须使用列位置或列名调用该列,以便将如此引用的列解析为字符串。

 类似资料:
  • 我试图使用mockito在scala中模拟,如下所示 会有什么问题?

  • 给定下面用Mockito模拟Scala类的代码,我会得到一个错误并且无法编译: 错误是: 对重载定义的引用不明确,类型为(x$1:class[common.testeable],x$2:org.Mockito.mocksettings)的对象Mockito中的方法mock和类型为(x$1:class[common.testeable],x$2:org.Mockito.stubbing.answhe

  • 本文向大家介绍Java Varargs中的方法重载和歧义,包括了Java Varargs中的方法重载和歧义的使用技巧和注意事项,需要的朋友参考一下 在Java中使用变量参数时存在歧义。发生这种情况是因为两种方法绝对可以有效地被数据值调用。因此,编译器不知道该调用哪种方法。 示例 输出结果 名为Demo的类定义了一个名为“ my_fun”的函数,该函数采用可变数量的浮点值。使用“ for”循环将这些

  • 为什么我有这个错误? 错误:(5,18)对重载定义的引用不明确,类型为(x$1:String)布尔的类String中的方法startsWith和类型为(x$1:String,x$2:Int)布尔的类String中的方法startsWith匹配预期的类型?水果过滤器(_.startswith==“AP”) 水果过滤器(_.startswith==“AP”)

  • scalac抱怨第一个实例化(对重载定义的引用不明确),因为单个参数和varargs方法都是相同特定的。 搜索stackoverflow时,我发现强制使用单参数方法是可能的。将使编译器使用。 我的问题是为什么第二个实例化匹配而没有额外的“提示”?换句话说,为什么双参数方法比varargs方法更具体,而单参数方法不是?

  • 我正在尝试使用AassetManager从android apk访问资产。然而,尽管我已经包含了asset_manager.h和asset_manager_jni.h,但我仍然得到了“对aassetmanager_fromjava的未定义引用”。其他来自asset_manager.h的函数,如AAssetManager_openDir(mgr,"“)等也不能被引用。 以下是完整的代码 这段代码在一