gpt4 book ai didi

scala - 如何为类(class)编写scala匹配器?

转载 作者:行者123 更新时间:2023-12-01 11:02:27 25 4
gpt4 key购买 nike

假设我有以下代码

def get[T](name:String)(implicit mf:ClassManifest[T]):T = mf.erasure match {
case classOf[Boolean] => obj.getBoolean(name)
case classOf[Int] => obj.getInt(name)
}

现在代码不起作用,因为 classOf[Int] 是无效的匹配值。

最佳答案

您几乎肯定应该研究在类对象上使用 list 和匹配的替代方法。在这种情况下,类型类将提供更简洁的解决方案,

// Assuming that Store is the type of obj ...

trait Get[T] { def get(s : Store, name : String) : T }
implicit val getBoolean = new Get[Boolean] {
def get(s : Store, name : String) : Boolean = s.getBoolean(name)
}
implicit val getInt = new Get[Int] {
def get(s : Store, name : String) : Int = s.getInt(name)
}

def get[T](name : String)(implicit inst : Get[T]) : T = inst.get(obj, name)

使用此实现,如果您要求使用不受支持的类型,则不会在运行时出现匹配错误,而是会收到静态编译时错误。

另请注意,作为一种在删除之前应用的编译时解析机制,这种技术比在运行时删除后的匹配要精确得多。例如,使用这种技术,我们可以区分 List[Int]List[String] 情况,而它们将等同于运行时测试。

关于scala - 如何为类(class)编写scala匹配器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9488405/

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