gpt4 book ai didi

scala - 折叠 HList?

转载 作者:行者123 更新时间:2023-12-02 01:22:15 29 4
gpt4 key购买 nike

给定:

import shapeless._
case class F(x: Option[Int], y: Option[Int])

我想帮忙写一个函数,f:

def f(Option[Int]::Option[Int]::HNil): String

这样每个Option[Int] 都被替换为Some 数字或;和 "" 代表 HNil

例子:

val res7 = Generic[F].to( F( Some(42), None) )
//res7: shapeless.::[Option[Int],shapeless.::
[Option[Int],shapeless.HNil]] = Some(42) :: None :: HNil

f(res7) === "42empty"

f怎么写?

最佳答案

你需要一个Poly:

 object OptFolder extends Poly2{
def conv(x: Option[Int]) = x.map(_.toString).getOrElse("empty")

implicit val ff = at{ (y: String, z: Option[Int]) => y + conv(z) }
}

val lala: String = myHlist.foldLeft("")(OptFolder) //:String not required

因此,一个 Generic 转换为 HList,然后是一个具有定义良好的 PolyfoldLeft

关于scala - 折叠 HList?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39277425/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com