gpt4 book ai didi

Scala:返回参数化类型的默认值

转载 作者:行者123 更新时间:2023-12-02 08:43:07 25 4
gpt4 key购买 nike

考虑 Scala 中的以下函数:

def wrapMyFunction[A](foo: =>A):A = {
try {
foo
}
catch { case e =>
//Return whatever the "empty" or "default" instance of type A would be,
//such as 0, "", None, List(), etc.
}
}

给定类型参数 A,如何获取类型 A 的“空”或“默认”值?有可能吗?

最佳答案

嗯,从技术上讲,这是不可能的,原因很简单,因为不存在“默认”值这样的东西。

您给出的示例都是幺半群零,因此,使用 Scalaz,您可以这样写:

def wrapMyFunction[A : Zero](foo: =>A):A = {
...
catch { case e: Exception => // do not catch all throwables!
implicitly[Zero[A]].zero
}
}

另一种选择是实例化一个值。您可以为此使用 ClassManifestClassTag (Scala 2.10.0)。例如:

def wrapMyFunction[A : scala.reflect.ClassTag](foo: => A): A = {
...
catch { case e: Exception =>
implicitly[scala.reflect.ClassTag[A]].runtimeClass.newInstance.asInstanceOf[A]
}
}

然而,这取决于无参数构造函数的存在。使用 ClassManifest 几乎是一样的。

关于Scala:返回参数化类型的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14847150/

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