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

折叠HList?

东门彬
2023-03-14

鉴于:

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

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

def f(Option[Int]::Option[Int]::HNil):字符串

这样,每个选项[Int]被替换为一些数字或空的;和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?

共有1个答案

双子民
2023-03-14

您需要一个多边形:

 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

因此,将一个泛型转换为HList,然后是一个具有定义良好的多边形的foldLeft

 类似资料:
  • Collapsibles 是可折叠元素,扩大时,点击。他们允许您隐藏不立即与用户相关的内容。 气孔 创建一个气孔式可折叠组件,只要增加类 popout。 <ul class="collapsible popout" data-collapsible="accordion"> 可折叠组件的 HTML 结构 <ul class="collapsible" data-collapsible="accor

  • 如果你仅仅希望看到你所处理的代码文件的结构概览,折叠会是个非常有用的工具。折叠可以隐藏像函数和循环这样的代码块,来简化你屏幕上显示的东西。 当你把鼠标移到数字栏上,你就可以点击显示的箭头来折叠代码段。你也可以使用快捷键alt-cmd-[和alt-cmd-]来折叠和展开代码段。 使用alt-cmd-shift-{来折叠所有代码段,使用alt-cmd-shift-}来展开所有代码段。你也可以使用cmd

  • zf数字 创建折叠,数字参数为折叠行数 zo 打开折叠 zc 关闭折叠 zd 删除折叠 :set foldcolumn=4 显示折叠树 :mkview 保存折叠 :loadview 读取折叠 zr 打开同一层级所有折叠 zm 关闭同一层级所有折叠 zO 打开某一行的所有层级折叠 zC 关闭某一行的所有层级折叠 zR 打开所有折叠 zM 关闭所有折叠 :set foldclose=all 光标离开折

  • 主要内容:实例,实例,用法,选项,方法,实例,事件,实例折叠(Collapse)插件可以很容易地让页面区域折叠起来。无论您用它来创建折叠导航还是内容面板,它都允许很多内容选项。 如果您想要单独引用该插件的功能,那么您需要引用 collapse.js。同时,也需要在您的 Bootstrap 版本中引用 Transition(过渡)插件。或者,正如 Bootstrap 插件概览 一章中所提到,您可以引用 bootstrap.js 或压缩版的 bootstr

  • 主要内容:实例,实例,实例,实例Bootstrap4 折叠可以很容易的实现内容的显示与隐藏。 实例 <button data-toggle="collapse" data-target="#demo">折叠</button> <div id="demo" class="collapse"> Lorem ipsum dolor text.... </div> 实例解析 .collapse 类用于指定一个折叠元素 (实例中的 <di

  • Bootstrap折叠板插件允许你在网页中用一点点JavaScript以及CSS类切换内容。它是一个灵活的插件,使用少量的类(来自必需的过渡插件),以方便切换行为。 示例 点击下面的按钮,利用类的改变,显示或隐藏另一个元素: .collapse 隐藏内容 .collapsing 在过渡过程中应用到 .collapse.in 显示内容 你可以使用带href属性的链接,或者使用带data-target