gpt4 book ai didi

scala - 类型参数中 `::` 的含义?

转载 作者:行者123 更新时间:2023-12-04 22:57:33 27 4
gpt4 key购买 nike

查看 Travis Brown 在 Type classes and generic derivation 上的优秀博客文章,我看到以下方法:

  implicit def hconsParser[H: Parser, T <: HList: Parser]: Parser[H :: T] =           
new Parser[H :: T] {
def apply(s: String): Option[H :: T] = s.split(",").toList match {
case cell +: rest => for {
head <- implicitly[Parser[H]].apply(cell)
tail <- implicitly[Parser[T]].apply(rest.mkString(","))
} yield head :: tail
}
}
H :: T是什么意思在 Parser[H :: T] ?

还有,这个如何 case cell +: rest处理 s的情况,即输入到 apply是空的?

最佳答案

H :: T是类型 ::[H, T] 的中缀形式,这是一个 HList带头型 H和尾部类型 T <: HList .即我们正在寻找一个 Parser对于类型 ::[H, T] .

中缀用法是这样实现的,其中infix可以是任何名称:

scala> trait infix[A, B]

scala> def test[A, B](ab: A infix B) = ???
test: [A, B](ab: infix[A,B])Nothing

Also, how does this case cell +: rest handle the case where s, i.e. input to apply is empty?



s是一个空字符串,那么 s.split(",").toList将只是一个 List以空字符串作为其单个元素。 case cell +: rest那么永远不会遇到一个空列表。

关于scala - 类型参数中 `::` 的含义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38670052/

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