scala - 提供附加参数以映射到 HList

标签 scala shapeless

我想做这样的事情:

def run(subjects: List[Subject]) = {
  val configs = compute()
  subjects.map(s => configs.map(c => test(s,c)))
  // or flatMap, I don't really care at this point
}

在我的用例中,主题实际上是 Subject[T] 并且我需要结果中 T 的类型安全版本。所以我有:

def run[L <: HList](subjects: L)(implicit mapper: Mapper[testFun.type, L]) = {
  val configs = compute()
  subjects.map(testFun)
}

但是,现在我无法将配置传递给 testFun,根据 this post ,需要有一个单例类型。

一个选择是:

val cfgHL = HList.fill(subjects.length)(configs)
(subjects zip cfgHL).map(testFun)

但是HList目前没有fill操作。有什么提示吗?

最佳答案

您可以使用mapConst 来完成与fill 相同的操作。如果我们有以下内容:

val xs = 1 :: 'a :: 'a' :: HNil

我们可以写:

scala> xs.zip(xs mapConst "x") == (1, "x") :: ('a, "x") :: ('a', "x") :: HNil
res0: Boolean = true

请注意,还有其他方法可以解决部分应用(更高等级)多态函数然后使用它们进行映射的问题 - 例如,请参阅 my answer here 。不过,对于您的用例来说,类似的事情可能有点过分了。

关于scala - 提供附加参数以映射到 HList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16724622/

相关文章:

scala - 如何使用 Spark/Scala 中的频率计数从文本文件创建二元组?

java - 从 Java 访问元组的奇怪行为

scala - 无形 : Prepend. 未找到隐式

scala - 如何使用 LabelledGeneric 一般更新案例类字段?

scala - 如何使用精炼来表达常量 > 22 的约束

Scala cake-pattern 编译错误与 Precog 配置模式

scala - 封装在 Future 中的同步 HTTP 请求是否被视为 CPU 或 IO 限制?

scala - 使用值与参数顺序不匹配的无形 HList 调用 Scala Function2

scala - 如何在另一个对象之前的对象中隐含?

scala - 无形:从副产品映射到不同的副产品