gpt4 book ai didi

scala - 如何在 Scala 中将类型作为参数传递?

转载 作者:行者123 更新时间:2023-12-04 15:35:30 25 4
gpt4 key购买 nike

我很难弄清楚如何在 Scala 中存储或传递类型。

我想要实现的是这样的:

abstract class Foo( val theType : type )
object Foo{
case object Foo1 extends Foo(String)
case object Foo2 extends Foo(Long)
}

所以在某些时候我可以这样做:
theFoo match{
case String => "Is a string"
case Long => "Is a long"
}

并且在获得能够转换它的对象时:
theFoo.asInstanceOf[Foo1.theType]

这可能吗?如果可能,是一个好的方法吗?我最终想要实现的是为字节流处理编写一个伪模式。例如,如果我有一个架构 Array(Foo1,Foo1,Foo2,Foo3,Foo1)我可以解析提示该模式的字节数组,如果在某个时候我有不同的字节流,我可以编写一个新模式 Array(Foo3, Foo4, Foo5)无需重新实现解析逻辑。

问候,

按要求编辑

假设我有一个名为 Command1 的 Array[Byte] = A973928CB3883FB123

该字节中的数据在位置和长度上是固定的。换句话说,我知道位置 1-4 是例如一个小日期,5-9 是客户的姓名等。

我想要的是编写一个解析函数,该函数仅将模式作为参数并返回模式中每个参数的实际值。
trait Command{

//This is implemented in every command
val schema : List[Tuple[String,Int,Int,Type]] //Position,Size,DataType

def parse() : List[Tuple[String,Int,Int,Type,Any]] = schema.map(//match using the type)
}

class Command1 extends Command {
override val schema = List[Tuple("theName",0,10,String),Tuple("myType",10,12,MyType),Tuple("theId",13,20,Long)]
val theActualName = parse().find(_._1 == "theName")._5.asInstanceOf[String] //I would like to avoid this cast

}

我希望这能澄清我正在尝试做的事情。

最佳答案

您可以使用 Scala 2.10(当它出现时)将类型作为值获取。在此之前,您可以获得的最好的是类(例如 classOf[String] ),但它会丢失任何类型参数。

即使使用 Scala 2.10,您也会遇到一些严重的限制。查看最近的 blog post以我的为例。

关于scala - 如何在 Scala 中将类型作为参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12271690/

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