gpt4 book ai didi

Scala 从一个字符串创建一个数字

转载 作者:行者123 更新时间:2023-12-04 17:55:22 26 4
gpt4 key购买 nike

我想做这样的事情:

def parse[A: Numeric](str: String): A = {
if A =:= Int, str.toInt
if A =:= Float, str.toFloat
if A =:= BigInt, BigInt(str)
...
...
}

不幸的是,Numeric 特征中似乎没有定义fromString。在 Scala 中实现此目的最惯用的方法是什么?

最佳答案

由于类型类的可扩展性,您所要求的通常是不可能的;您无法匹配 Numeric 的所有可能实现,因为任何用户定义的类型都可以实现它。同样,因此,不能保证每个 Numeric[A] 都可以从字符串中解析。

有两种解决方法。一种是部分解决方案,您确保只使用表示整数文字的字符串,然后使用 IntfromString 来解析它和 Numeric' s fromInt 进行转换。

另一种方式是在调用函数时传入实际的字符串解析函数。这有点像作弊,因为您的 parse 方法不再做任何实际工作,但可以通过隐式变得非常有用。

最直接的方法是添加一个(可能是隐式的)String -> A 参数(或者可能是 String -> Option[A] 以减少运行时错误) .实现此目的的另一种方法是转到 the typeclass route again and implement something like a Readable typeclass .然后你可以让你的功能如下:

def parse[A: Numeric: Readable](x: String): A = ...

现在您只需要确保您对所有您关心的A 都有Readable[A] 实现。

关于Scala 从一个字符串创建一个数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35980321/

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