gpt4 book ai didi

scala - 是否可以将 TypeTag 转换为 Manifest?

转载 作者:行者123 更新时间:2023-12-03 04:40:51 25 4
gpt4 key购买 nike

我们的库使用 TypeTags,但现在我们需要与另一个需要 Manifests 的库进行交互。有没有简单的方法可以从 TypeTag 创建 list ?

最佳答案

如果您在存在 TypeTag 时天真地尝试调用 Manifest,编译器将为您提供解决方案的提示:

import reflect.runtime.universe._
import reflect.ClassTag

def test[A : TypeTag] = manifest[A]
<小时/>
error: to create a manifest here, it is necessary to interoperate with the type
tag `evidence$1` in scope.
however typetag -> manifest conversion requires a class tag for the corresponding
type to be present.
to proceed add a class tag to the type `A` (e.g. by introducing a context bound)
and recompile.
def test[A : TypeTag] = manifest[A]
^

因此,如果范围内有 ClassTag,编译器将能够创建必要的 Manifest。您有两个选择:

  • TypeTag 所在的任何位置添加第二个上下文绑定(bind),如下所示:

    def test[A : TypeTag : ClassTag] = manifest[A] // this compiles
  • 或者首先将 TypeTag 转换为 ClassTag,然后请求 Manifest:

    def test[A](implicit ev: TypeTag[A]) = {
    // typeTag to classTag
    implicit val cl = ClassTag[A]( ev.mirror.runtimeClass( ev.tpe ) )

    // with an implicit classTag in scope, you can get a manifest
    manifest[A]
    }

关于scala - 是否可以将 TypeTag 转换为 Manifest?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23383814/

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