如何将元素追加到HList

巴托斯(Bartosz Jankiewicz)

我正在尝试以下课程

import shapeless._
import syntax.std.tuple._

class TestedClass[HL](nodes: HL) {

    def addElement[T, OUT](clause: HL => T) = {
        new TestedClass[OUT](nodes :+ clause(nodes))
    }
}

显然,此片段无法编译。我不知道如何将新的元组nodes :+ clause(nodes)类型绑定到OUT。我想实现以下目标:

scala> val step1 = new TestedClass[(Int)](1)
res1: TestedClass[(Int)]

scala> val step2 = step1.addElement(nodes => 2.0)
res1: TestedClass[(Int, Double)]

Scala有可能吗?

特拉维斯·布朗

是的,尽管Scala不提供的语法,但可能不是很好,这是可能的Tuple1但是以下将起作用:

import shapeless._, ops.tuple.Prepend

class TestedClass[HL](nodes: HL) {
  def addElement[T, OUT](clause: HL => T)
    (implicit prepend: Prepend.Aux[HL, Tuple1[T], OUT]) = {
      new TestedClass[OUT](prepend(nodes, Tuple1(clause(nodes))))
    }
}

接着:

scala> val step1 = new TestedClass[Tuple1[Int]](Tuple1(1))
step1: TestedClass[(Int,)] = TestedClass@4fb78b02

scala> val step2 = step1.addElement(nodes => 2.0)
step2: TestedClass[(Int, Double)] = TestedClass@20406333

每当您想使用Shapeless的操作时,基本技巧就是找到所需的类型类,并要求适当的实例作为隐式参数。在这种情况下,Prependfor元组就是我们想要的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将元素从数组追加到容器?

来自分类Dev

如何将元素追加到numpy数组

来自分类Dev

如何将元素追加到结构中的QList?

来自分类Dev

如何将元素附加到主体?

来自分类Dev

如何将元素附加到KList?

来自分类Dev

如何将元素附加到div?

来自分类Dev

如何将数据附加到元素

来自分类Dev

如何将数据追加到DataGrid?

来自分类Dev

如何将元素追加到同一行上的多个数组?

来自分类Dev

如何将新的JSON元素追加到JSON_array?

来自分类Dev

如何将DOM元素对象列表追加到另一个DOM元素对象列表

来自分类Dev

如何将2个简短列表中的元素追加到另一个大元组列表中?

来自分类Dev

如何将元素的属性添加到角度指令

来自分类Dev

如何将元素附加到iframe表单?

来自分类Dev

如何将元素添加到列表?

来自分类Dev

如何将数据附加到元素属性值

来自分类Dev

如何将EventListener添加到将来的dom元素?

来自分类Dev

如何将onclick事件附加到XTemplate元素extjs?

来自分类Dev

如何将警报值添加到元素

来自分类Dev

如何将多个元素添加到数组?

来自分类Dev

如何将几个元素添加到JScrollPane

来自分类Dev

如何将新的字段/元素添加到JsonObject?

来自分类Dev

如何将Click处理程序附加到DOM元素

来自分类Dev

如何将圆添加到svg元素

来自分类Dev

如何将侦听器附加到克隆的元素?

来自分类Dev

如何将元素添加到文本块?

来自分类Dev

如何将Ruby代码附加到HTML元素

来自分类Dev

如何将实例对象的元素添加到arraylist?

来自分类Dev

OM如何将类添加到html元素