gpt4 book ai didi

scala - 这可以简化吗?

转载 作者:行者123 更新时间:2023-12-01 05:41:52 25 4
gpt4 key购买 nike

引用 previous answer of mine on stackoverflow

仅用一种方法说明了复杂性的核心:

implicit def traversableToFilterOps[CC[X] <: Traversable[X], T]
(xs: CC[T])(implicit witness: CC[T] <:< TraversableLike[T,CC[T]]) =
new MoreFilterOperations[CC[T], T](xs)

有两个问题:
  • 有没有办法给编译器一个提示 Map符合签名CC[X] <: Traversable[X] ?
    我希望它匹配为 Traversable[Tuple2[_,_]]但这不会发生。最后,我不得不写第二个方法,取 CC[KX,VX] <: Map[KX,VX] ,但这感觉是多余的
  • witness: CC[T] <:< TraversableLike[T,CC[T]]考虑到第一个类型参数也似乎是多余的,我的直觉是这是由 Traversable 的类型强制执行的并且对于 X 的任何可能的子类或值必须始终成立,所以应该没有理由明确要求它作为证人。

  • 如果我使用 REPL 中的存在类型对此进行测试,那么编译器似乎同意我的看法:
    scala> implicitly[Traversable[X] <:< TraversableLike[X,Traversable[X]] forSome { type X }]
    res8: <:<[Traversable[X],scala.collection.TraversableLike[X,Traversable[X]]] forSome { type X } = <function1>

    因此有什么办法可以取消样板文件吗?

    最佳答案

    我是 Scala 菜鸟,所以如果这没有帮助,请不要击落我。

    假设:

    class MoreFilterOperations[Repr <% TraversableLike[T,Repr], T] (xs: Repr) {}

    像这样的东西会起作用吗?
    // t2fo is short for traversableToFilterOps
    implicit def t2fo[Repr <% TraversableLike[T, Repr], T](xs: Repr) =
    new MoreFilterOperations[Repr, T](xs)

    // m2fo is short for mapToFilterOps
    implicit def m2fo[Repr <% Map[K, V] <% TraversableLike[(K,V), Repr], K, V]
    (xs: Repr) = new MoreFilterOperations[Repr, (K, V)](xs)

    这应该有效,因为(根据我拥有的书.. Programming Scala,p264)以下方法定义与 View 绑定(bind):
    def m [A <% B](arglist): R = ...

    它实际上与此方法定义相同:
    def m [A](arglist)(implicit viewAB: A => B): R = ...

    关于scala - 这可以简化吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5039526/

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