类型参数声明中的无形状解构元组

2024-02-05

我正在使用返回 Tuple2 的 RightFolder 并希望返回_1部分。第一个版本rightFoldUntupled1工作正常但使用额外的IsComposite类型类。

在第二个版本中rightFoldUntupled2我尝试在不使用的情况下实现相同的目标IsComposite通过解构P as a Product2[_, Values]。这不再起作用了 - 编译器很高兴看到 P 是一个Product2[_,_],但是一旦我使用命名类型参数_1它不再编译。知道为什么吗?

完整的源代码(sbt 准备好以隐式调试输出运行)在这里:https://github.com/mpollmeier/shapeless-playground/tree/f3cf049 https://github.com/mpollmeier/shapeless-playground/tree/f3cf049

case class Label[A](name: String)

val label1 = Label[Int]("a")
val labels = label1 :: HNil

object getValue extends Poly2 {
  implicit def atLabel[A, B <: HList] = at[Label[A], (B, Map[String, Any])] {
    case (label, (acc, values)) ⇒
      (values(label.name).asInstanceOf[A] :: acc, values)
  }
}

// compiles fine
val untupled1: Int :: HNil = rightFoldUntupled1(labels)

// [error] could not find implicit value for parameter folder:
// shapeless.ops.hlist.RightFolder.Aux[shapeless.::[Main.DestructureTupleTest.Label[Int],shapeless.HNil],
//(shapeless.HNil, Map[String,Any]),Main.DestructureTupleTest.getValue.type,P]
val untupled2: Int :: HNil = rightFoldUntupled2(labels)

def rightFoldUntupled1[L <: HList, P <: Product2[_, _], Values <: HList](labels: L)(
  implicit folder: RightFolder.Aux[L, (HNil, Map[String, Any]), getValue.type, P],
  ic: IsComposite.Aux[P, Values, _]
): Values = {
  val state = Map("a" -> 5, "b" -> "five")
  val resultTuple = labels.foldRight((HNil: HNil, state))(getValue)
  ic.head(resultTuple)
}

def rightFoldUntupled2[L <: HList, Values, P <: Product2[_, Values]](labels: L)(
  implicit folder: RightFolder.Aux[L, (HNil, Map[String, Any]), getValue.type, P]
): Values = {
  val state = Map("a" -> 5, "b" -> "five")
  val resultTuple = labels.foldRight((HNil: HNil, state))(getValue)
  resultTuple._1
}

这应该与rightFoldUntupled1:

def rightFoldUntupled2[L <: HList, Values, M](labels: L)(
  implicit folder: RightFolder.Aux[L, (HNil, Map[String, Any]), getValue.type, (Values, M)]
  ): Values = {
  val state = Map("a" -> 5, "b" -> "five")
  val resultTuple = labels.foldRight((HNil: HNil, state))(getValue)
  resultTuple._1
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

类型参数声明中的无形状解构元组 的相关文章

  • 如何识别远程参与者?

    我有一个远程参与者 客户端 它正在向另一个远程参与者 服务器 注册 然后注销 使用关闭挂钩 然而 虽然服务器接收到注销 但实际sender财产是一个不同的 Channel 对象 所以在我的服务器日志中我有 Registered new cl
  • scala.concurrent.blocking - 它实际上做了什么?

    我花了一段时间学习 Scala 执行上下文 底层线程模型和并发性的主题 你能解释一下通过什么方式吗scala concurrent blocking 调整运行时行为 and 可以提高性能或避免死锁 如中所述scaladoc http www
  • 对列表中的相邻元素进行分组

    假设我想编写一个函数来执行此操作 输入 1 1 3 3 4 2 2 5 6 6 输出 1 1 3 3 4 2 2 5 6 6 它将相同的相邻元素分组 这个方法的名称应该是什么 此操作有标准名称吗 In 1 1 3 3 4 2 2 5 6 6
  • Akka/Scala:映射 Future 与 pipelineTo

    In Akka参与者 在发送一个Future结果给另一个演员 A 映射Future发挥作用tell结果给演员 B 定义一个onSuccess未来的回调 其中tell结果给演员 C 管道Future结果给演员pipeTo 其中一些选项已在上一
  • scala 中的模拟案例类:Mockito

    在我的游戏应用程序中 我打算模拟一个案例类 我可以这样做 但它创建了一个所有成员变量都为空的对象 有没有办法创建案例类的模拟对象 以便该对象可以初始化一些成员 case class User name String address Stri
  • sbt:编译测试时设置特定的 scalacOptions 选项

    通常我使用这组选项来编译 Scala 代码 scalacOptions Seq deprecation encoding UTF 8 feature unchecked language higherKinds language impli
  • 具有动态命名参数的 Scala 案例类副本

    对于具有参数数量的 scala 案例类 21 e g case class Car type String brand String door Int 其中类型 吉普车 品牌 丰田 门 4 etc 还有一个复制方法允许使用命名参数覆盖 Ca
  • 如何列出所有 sbt 依赖项?

    我需要列出所有 sbt 依赖项 以便检查是否已存在 debian 软件包 我还注意到有一个 DEB 包 http www scala sbt org 0 13 tutorial Installing sbt on Linux html但似乎
  • 获取两个顶点之间的边属性值时出现 ClassCastException

    我正在尝试获取两个顶点之间的边缘属性值并低于异常 java lang ClassCastException 无法将 java lang String 转换为 scala runtime Nothing 环境 内存中的泰坦 Code val
  • [json4s]:提取不同对象的数组

    我正在使用 facebook graph API 响应看起来与此类似 data id 311620272349920 311718615673419 from id 1456046457993048 name Richard Ettinso
  • 尝试创建 jar 时出现 UNRESOLVED DEPENDENCIES 错误

    我正在尝试构建一个 Scala jar 文件以在 Spark 中运行它 我正在关注这个tutorial http spark apache org docs latest quick start html 当尝试使用 sbt 作为构建 ja
  • 如何向数据框spark添加标题和列?

    我有一个数据框 我想在其中添加标题和第一列 手动 这是数据框 import org apache spark sql SparkSession val spark SparkSession builder master local appN
  • Scala 功能设计模式目录

    一周以来我一直在阅读 Scala 编程 作者一步一步地介绍了该语言的元素 但我仍然很困惑何时使用演员 闭包 柯里化等功能性的东西 我正在寻找功能结构的典型用例或最佳实践的目录 我并不是说在 Scala 中重新实现像 GoF 这样的众所周知的
  • 创建自定义 scala 集合,其中映射默认返回自定义集合?

    特质TraversableLike A Repr 允许人们在其中进行收藏some函数将返回一个Repr 而其他人则继续返回类型参数That在功能上 有没有办法定义一个CustomCollection A 其中函数如map 其他的默认That
  • 按元素聚合数组

    Spark scala 相当新 我想知道是否有一种简单的方法以按列方式聚合 Array Double 这是一个例子 c1 c2 c3 1 1 1 0 1 0 3 4 1 2 1 0 0 0 4 3 2 1 0 0 0 0 0 0 2 3 1
  • 读取不同文件夹深度的多个 csv 文件

    我想递归地将给定文件夹中的所有 csv 文件读入 Spark SQLDataFrame如果可能的话 使用单一路径 我的文件夹结构如下所示 我想包含具有一个路径的所有文件 resources first csv resources subfo
  • 如何使用精炼库定义 A 和 B 取决于彼此的类型类?

    Problem 我有一个案例类 Passenger 从 A 点出发 前往 B 点 有效乘客意味着A点不等于B点 Passenger a Int b Int 问题 我如何使用设计乘客舱refind https index scala lang
  • SBT插件——编译前执行自定义任务

    我刚刚编写了我的第一个 SBT 自动插件 它有一个生成设置文件的自定义任务 如果该文件尚不存在 当显式调用任务时 一切都会按预期工作 但我希望在使用插件编译项目之前自动调用它 无需项目修改其 build sbt 文件 有没有办法实现这一点
  • Scala apply 方法调用,因为括号与隐式参数冲突

    Cay Horstmann 的书 Scala for the Impressive 中有一段关于 apply 方法的注释 有时 表示法会与另一个 Scala 功能发生冲突 隐式参数 例如 表达式 Bonjour sorted 3 产生错误
  • 在 Scala 中反转地图的优雅方法

    目前正在学习Scala 需要反转Map 来进行一些反转值 gt 键查找 我一直在寻找一种简单的方法来做到这一点 但只想到了 Map origMap map kvp gt kvp 2 gt kvp 1 有人有更优雅的方法吗 假设值是唯一的 则

随机推荐