gpt4 book ai didi

scala - 谁能解释一下这段scala代码的含义

转载 作者:行者123 更新时间:2023-12-04 14:41:34 25 4
gpt4 key购买 nike

我正在阅读这段代码很长时间。我将它输入到 REPL 中,它也能正常工作。

但我不知道这里发生了什么。为什么以及如何这甚至起作用!!!

import shapeless._

case class Size[L <: HList](get : Int)
object Size {
implicit val hnilSize = Size[HNil](0)
implicit def hconsSize[H, T <: HList](implicit tailSize: Size[T]) =
Size[H :: T](1 + tailSize.get)
def apply[L <: HList](l : L)(implicit size: Size[L]) : Int = size.get
}

Size(1 :: "Foo" :: true :: HNil)

有人可以逐步解释这一点并帮助我了解这里发生的事情。

最佳答案

是的,那是很厚的东西。

这里最令人费解的是 hconsSize是递归的,实际上没有自引用。

两者 applyhconsSize拉入类型 Size[X] 的隐式.只有两个隐式可以适合该法案:

  • hnilSize ,但前提是 X是类型 HNil
  • hconsSize本身

  • 所以 apply拉入 hconsSize隐式,将 1 添加到堆栈并拉入另一个 hconsSize隐式(不一定按该顺序)。这一直持续到我们遇到类型为 HNil 的元素为止。 .然后是 hnilSize隐式被拉入, get为零,堆栈展开并将所有这些 1 相加。

    结果:无形的 HList 中的元素数。

    关于scala - 谁能解释一下这段scala代码的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37693097/

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