Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 将HList转换为HMap[Int,TypeTag[]]的无形状_Scala_Shapeless - Fatal编程技术网

Scala 将HList转换为HMap[Int,TypeTag[]]的无形状

Scala 将HList转换为HMap[Int,TypeTag[]]的无形状,scala,shapeless,Scala,Shapeless,让我们假设下面的代码 import scala.reflect.runtime.universe._ import shapeless._ trait Base case class A() extends Base case class B() extends Base case class C() extends Base val tt = List(typeTag[A], typeTag[B], typeTag[C]) val tts = typeTag[A] :: typeTag[

让我们假设下面的代码

import scala.reflect.runtime.universe._
import shapeless._

trait Base
case class A() extends Base
case class B() extends Base
case class C() extends Base

val tt = List(typeTag[A], typeTag[B], typeTag[C])

val tts = typeTag[A] :: typeTag[B] :: typeTag[C] :: HNil



cast(A(), tts.head) 
case(A(), tt.head) //res1: Product with Serializable with Base = A()


def cast[A](a: Base, tt: TypeTag[A]): A = a.asInstanceOf[A]
如果运行上述代码,您可以看到这两个cast返回的内容的差异。 可能听起来很幼稚,但在第一次cast中,我将访问
case class A
s成员,因为它的返回类型只是A,但不会是普通列表的情况

我同意不成形HList使它们成为可能,HMap也可以这样做吗

例如: val hmap=hmap(1->typeTag[A],2->typeTag[B],3->typeTag[C])

当我尝试执行
hmap.get(1)
时,它应该返回
TypeTag[A]
类似于执行
tts.head时的工作方式

另外,当我执行
cast(A(),tts.head)
时,它运行良好,但当我执行
cast(A(),tts(0))
时,它失败

工作表中的两个返回签名看起来相同

tts(0) //res2: reflect.runtime.universe.TypeTag[A] = 
       TypeTag[A$A151.this.A]

tts.head //res3: reflect.runtime.universe.TypeTag[A] = 
          TypeTag[A$A151.this.A]

为什么
HMap
而不是记录?
HMap
s需要指定允许映射的其他类型和隐式。我应该能够解释为什么您的示例不起作用,因为您使用了
HMap
的完整代码。此外,该机器的用例可能会有所帮助。我的要求非常简单。我需要一个映射,在获得特定键的值时,我希望它返回
TypeTag[a]
,以便我可以强制转换它。示例:
hmap.get(1)//应该返回TypeTag[A]
,就像我执行
HList.head时HList的返回方式一样。能否为编译但失败的
hmap
提供代码?或者你从来没有让它工作过?