如何使方法通用而不出现“未找到匹配的形状”

2024-05-20

除了编写大量样板文件之外,我不知道如何克服这个“找不到匹配的形状”错误。

要点中说明的基本思想是,我有一个非常基本的方法版本(有效,但非常具体),然后是一个采用mapper参数并且更通用(也可以工作,但特定于一种特定类型),然后是第三个版本,它采用类型参数并且非常有用,但由于此错误而无法编译。

基本方法:

def updatePD_FirstNames(id: ids.PersonalDetailsId, firstNames: StringLtd30): Future[Int] = {

更好的方法:

def updatePD_SL(id: ids.PersonalDetailsId, mapper: tables.PersonalDetails => tables.profile.api.Rep[StringLtd30], sl: StringLtd30): Future[Int] = {

理想的方法(但不能编译):

def updatePD_X[X](id: ids.PersonalDetailsId, mapper: tables.PersonalDetails => tables.profile.api.Rep[X], sl: X): Future[Int] = {

```

[server] $ compile
[info] Compiling 1 Scala source to ... target\scala-2.12\classes...
[error] ...schema\DbProxy.scala:688: No matching Shape found.
[error] Slick does not know how to map the given types.
[error] Possible causes: T in Table[T] does not match your * projection,
[error]  you use an unsupported type in a Query (e.g. scala List),
[error]  or you forgot to import a driver api into scope.
[error]   Required level: slick.lifted.FlatShapeLevel
[error]      Source type: slick.lifted.Rep[X]
[error]    Unpacked type: T
[error]      Packed type: G
[error]   val q2: Query[tables.profile.api.Rep[X], X, Seq] = q1.map(mapper)
[error]                                                            ^
[error] one error found
[error] (server/compile:compileIncremental) Compilation failed
[error] Total time: 4 s, completed 23-Mar-2017 11:15:47

```

完整代码位于https://gist.github.com/aholland/0845bf29d836d672d006ab58f5f1c73c https://gist.github.com/aholland/0845bf29d836d672d006ab58f5f1c73c


我在您发布的代码中看到的唯一明显的问题是X是不受约束的。它可以是任何类型,包括 Slick 不知道如何处理的类型。

你能做的就是添加一个上下文绑定 on X。您可能想要的界限是基本类型 https://github.com/slick/slick/blob/3.2.0/slick/src/main/scala/slick/ast/Type.scala,这是 Slick 用来标识它可以使用的类型的“类型化类型”。从 11:30 开始描述https://www.youtube.com/watch?v=tS6N5AaZTLA https://www.youtube.com/watch?v=tS6N5AaZTLA

你会像这样使用它:

import slick.ast.BaseTypedType

def updatePD[X : BaseTypedType](
  id: Long, 
  selector: PersonTable => Rep[X],
  newValue: X
): DBIO[Int] =
  people.filter(_.id === id).map(selector).update(newValue)

这意味着当您使用该方法时...

updatePD(anId, _.name, "Alice")

...编译器必须向自己证明无论什么X当您使用时,Slick 中有适当的类型表示。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使方法通用而不出现“未找到匹配的形状” 的相关文章

  • 通过 Gradle 进行测试时记录日志

    在测试时 Gradle 似乎将 stdout stderr 重定向到project dir build reports tests index html 有没有办法避免这种重定向 并将内容打印到控制台 附加信息 这是一个 Scala 2 9
  • 为什么“private val”和“private Final val”不同?

    我曾经以为private val and private final val是一样的 直到我看到 Scala Reference 中的第 4 1 节 常量值定义的形式为 final val x e 其中 e 是常量表达式 第 6 24 节
  • 将 Scala 文件转换为 Dll

    我有一些使用 IntelliJ 和 SBT Plugin 编写的 scala 代码 并希望将代码作为 C 的 DLL 提供给我 我已经尝试使用 ikvmc 我通过 package 将所有类打包在一个罐子中 之后 我手动设置一个 jar 其中
  • scala sbt 在多项目上测试运行设置和清理命令一次

    我知道我可以通过修改 testOptions 在 sbt 中添加设置和清理代码以用于测试阶段 例如 val embedMongoTestSettings Seq Setting Seq testOptions in Test Tests S
  • 简单的 Scala actor 问题

    我确信这是一个非常简单的问题 但很不好意思地说我无法理解它 我有一个 Scala 值列表 我想使用演员来并行地对每个值进行一些 外部 调用 我想等到所有值都已处理完毕 然后继续 没有共享值被修改 有人可以建议吗 Thanks Scala 中
  • Liftweb 环境中的后台任务

    我必须编写守护进程 并且我想使用模型来连接到数据库和一些有用的 Lift 类 是否可以运行 Rails 的 rake 任务的模拟 Scala 社区组上也有类似的问题 答案是使用Actors来做后台处理
  • 如何检查字符串中是否包含某个字符?

    我想检查字符串是否包含该字符 我正在编写一个刽子手代码 例如 下面是要猜测的单词 scala 但看起来像 至用户 假设用户输入字母 a 那么它一定看起来像 a a def checkGuess if result contains user
  • Scala 性能问题

    In the 丹尼尔 科泽夸 Daniel Korzekwa 撰写的文章 http blog danmachine com 2011 01 moving from java to scala one year html 他说以下代码的性能
  • scala/spark 代码不允许在 hive 中添加列

    如果源数据有新列 我尝试在 Hive 表中添加一列 所有新列的检测都运行良好 但是 当我尝试将列添加到目标表时 我收到此错误 for f lt df schema fields if f name chk spark sqlContext
  • 对于空列表,max() 应该返回什么?

    Got java util NoSuchElementException head of empty list所以我试着检查一下 但现在我明白了 info max of a few numbers FAILED info 0 did not
  • 了解 Scala 中的中缀方法调用和缺点运算符(::)

    我对 Scala 编程语言相当陌生 当我遵循以下网站的讲义时 我正在尝试一些萦绕在我脑海中的东西 here http horstmann com sjsu cs152 04 closures1 html 我想我无法真正理解 cons 运算符
  • 使用 Akka 玩 2.5 - 找不到参数超时的隐式值:akka.util.Timeout

    我正在尝试使用 Play 2 5 测试 Akka 但遇到了一个似乎无法解决的编译错误 我正在关注 Play 文档中的此页面 https playframework com documentation 2 5 x ScalaAkka http
  • 如何在 Scala 中打印任何内容的列表?

    目前我有一个打印整数的方法 def printList args List Int Unit args foreach println 我如何修改它 使其足够灵活 可以打印任何内容的列表 您不需要专用的方法 所需的功能已经在集合类中 pri
  • Play Framework 2.3 (Scala) 中的自定义 JSON 验证约束

    我设法使用自定义约束实现表单验证 但现在我想对 JSON 数据执行相同的操作 如何将自定义验证规则应用于 JSON 解析器 示例 客户端的 POST 请求包含用户名 username 我不仅要确保该参数是非空文本 而且还要确保该用户确实存在
  • Scala Tuple2Zipped 与 IterableLike zip

    两种实现有什么区别 这个比那个好吗 有一篇博客文章说 Tuple2Zipped 性能更好 但没有提供原因 并且查看源代码我没有看到差异 val l1 List 1 2 3 val l2 List 5 6 7 val v1 l1 zip l2
  • Spark Scala 将列从一个数据帧复制到另一个数据帧

    我有一个原始数据框的修改版本 我在其上进行了聚类 现在我想将预测列恢复为原始 DF 索引没问题 因此匹配 我该怎么做 使用这段代码我得到一个错误 println Predicted dfWithOutput show println Ori
  • 缓存 Slick DBIO 操作

    我正在尝试加快 SELECT FROM WHERE name 的速度Play 中的查询类型 Scala 应用程序 我正在使用 Play 2 4 Scala 2 11 play slick 1 1 1 包 该软件包使用Slick 3 1版本
  • 运行具有外部依赖项的 Scala 脚本

    我在 Users joe scala lib 下有以下 jar commons codec 1 4 jar httpclient 4 1 1 jar httpcore 4 1 jar commons logging 1 1 1 jar ht
  • Java 中的“Lambdifying”scala 函数

    使用Java和Apache Spark 已用Scala重写 面对旧的API方法 org apache spark rdd JdbcRDD构造函数 其参数为 AbstractFunction1 abstract class AbstractF
  • Scala 中的 Shapeless 结构编程:如何正确使用 SYB 实现?

    我想使用SYB http research microsoft com en us um people simonpj papers hmap 实施于无形图书馆 https github com milessabin shapeless编写

随机推荐

  • 自动更新Windows服务[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我即将开发一个程序 该程序将作为 Windows 服务安装在多个客户端的后端服务器 可访问互联网 上并运行 我无法物理访问服务器 我正在研究的是
  • ArrayFormula 破坏了 getLastRow() 函数。可能的解决方法?

    在我的电子表格中 我有一个正在运行的脚本 它使用getLastRow 功能是其逻辑的重要组成部分 自从我在其中一列中应用数组公式以来 getLastRow 功能无法正常工作 即使其他列中没有其他值 数组公式似乎也一直 应用 到工作表的底部
  • Jquery:将链接标记为已访问而不打开它们?

    我无意仅仅更改链接 我听说这是不可能的 但如果不是 我很想知道如何更改 如果需要的话 我可以将其添加到浏览器历史记录中 我想遍历所有 a 位于页面上并将其状态更改为已访问 例如 a each function mark as visited
  • scanf %u 负数?

    我努力了scanf u number 我输入了负数 问题是当我printf d number 我得到负数 我认为这会阻止我读取负数 是scanf d number and scanf u number 真的是同一件事吗 或者只是为了可读性
  • Safari 服务器发送事件 (SSE) 无限循环

    我在 Safari 9 和 Safari 10 中遇到服务器发送事件 SSE 问题 SSE 连接打开 立即关闭 然后在无限循环中重新连接 这是客户端代码 var events new EventSource stream events 这些
  • 在不同端口上运行多个 actix 应用程序

    我正在尝试运行两个应用程序 一个在端口 3006 上进行管理 另一个在端口 8080 上提供数据 他们共享数据库池 缓存 对于 actix 1 0 我可以这样做 我不知道这是否是最好的方法 let server Server build F
  • powershell Invoke-WebRequest WebSession 不起作用

    我无法让以下代码工作 它似乎已登录 但随后返回带有 response 的登录页面 我猜这与回发有关 有办法解决这个问题吗 谢谢 login Invoke WebRequest Uri http www sqlpass org UserLog
  • & 在 XML 代码中导致错误的符号

    我有以下 XML 代码 用于过滤我的 Crm Dynamics 表单中的查找字段 该过滤器根据输入帐户字段的数据使用 但是 帐户字段可以包含 符号 当出现时 会发生错误 表明 XML 格式不正确 有人有解决问题的办法吗 function a
  • 如何在 Visual Studio 2017 中运行 NUnit 测试?

    I ve just installed Visual Studio 2017 I have a project using NUnit for the test cases Ctrl R T no longer runs the tests
  • 使用 JOGL 和 Android OpenGL 编写可移植 Java 应用程序

    我计划编写一款可以在 PC 和 Android 上运行的 Java 3D 游戏 不幸的是 这两个平台似乎没有通用的 OpenGL API API 是否有显着差异 有没有办法在两个版本中使用相同的 3D 代码 这是不是一个好主意 Androi
  • Foursquare - OAuth 身份验证 - .Net 示例

    是否有关于如何使用 Oauth 向 Foursquare 进行身份验证的示例 这里有一个关于如何将 OAuth 与 Foursquare 结合使用的非常好的工作流程摘要 http developer foursquare com docs
  • Python - 如何取消 python-trio 中托儿所生成的特定任务

    我有一个监听特定端口的异步函数 我想一次在几个端口上运行该函数 当用户想要停止在特定端口上侦听时 停止在该端口上侦听的函数 之前我使用 asyncio 库来完成此任务 并通过创建以唯一 id 作为名称的任务来解决此问题 asyncio cr
  • 在 Keras 中连接两个目录迭代器

    假设我有类似以下内容 image data generator ImageDataGenerator rescale 1 255 train generator image data generator flow from director
  • 使用 ASP.NET 控件而不进行数据绑定

    看来我使用 ASP NET 数据绑定太久了 以至于忘记了一些基础知识 我正在 ASPX 页面中动态创建一个表 无需数据绑定 foreach XXX x in TTTT gt tr td td tr
  • MATLAB:将当前文件夹设置为脚本位置

    我在不同的文件夹中有一些脚本和数据 我使用addpath和相对路径经常 我的问题是 只有当我的当前文件夹是我执行的脚本所在的位置时 这才有效 例如 如果我执行添加路径 X 的脚本 A 然后执行位于路径 X 中的脚本 B 则 Matlab 不
  • 表单关闭时的操作

    如何通过按下关闭按钮来使窗体不被关闭 并且被关闭 private void Form1 Closed object sender EventArgs e Form1 Hide 所以表格都是封闭的 您应该在 FormClosing 而不是 F
  • MPMusicPlayerController 和 setNowPlayingItem

    我在用着MPMusicPlayerController 特别是与setNowPlayingItem协议 它是为了cydia 但我在制作时遇到了一些问题和理论的警告 似乎某些协议和方法不起作用 我收到如下警告 Tweak xm 177 war
  • 如何在 Vue.js 中将 InnerHtml 复制到剪贴板?

    我想将此 for 循环的内容复制到剪贴板中 div class links div class row p makeUrl name p div div
  • @api.one、@api.multi 和 @api.model 有什么区别?

    我很困惑 api one api multi and api model在奥杜 三者之间有什么区别以及它们的用例是什么 api one旨在仅在一条记录上调用方法时使用 它确保在调用方法时不存在多个记录api one装饰师 假设你有记录par
  • 如何使方法通用而不出现“未找到匹配的形状”

    除了编写大量样板文件之外 我不知道如何克服这个 找不到匹配的形状 错误 要点中说明的基本思想是 我有一个非常基本的方法版本 有效 但非常具体 然后是一个采用mapper参数并且更通用 也可以工作 但特定于一种特定类型 然后是第三个版本 它采