小编Mic*_* W.的帖子

如何在 scala 中定义一个接受所有“可计算”数据类型的通用函数?

我已经遇到过这个问题好几次了:

我有一个计算某些东西的函数,可以说

def square(n: Int): Int = n * n
Run Code Online (Sandbox Code Playgroud)

(非常简单的例子,但这就可以了)

然后我对另一种数据类型有相同的“算法”,可以说很长:

def square(n: Long): Long = n * n
Run Code Online (Sandbox Code Playgroud)

然后是 BigInt、Short、Byte 等。

如果我的算法比这个例子更复杂、更长,我就会有很多代码重复。

我想要的是一个通用定义,例如:

def square[T :> AnyVal](n: T): T = n * n
Run Code Online (Sandbox Code Playgroud)

但这不起作用,因为在 hirachy 类中,在 AnyVal 与 Int、Long 和 Float 之下还有 Boolean 和 Unit。对于布尔值和单位,术语 n * n 没有意义,我得到一个编译器错误(正确)。

我只希望我的函数适用于“可计算”数据类型,如 Int、Long、Float...,它们具有所有常见的数学运算符,如 +、*、/、< 等,然后用此制定我的算法或计算一次性为所有操作员提供服务。

当然,我可以匹配函数输入变量 n,然后以不同的方式处理每种情况,但我也会像之前一样通过重载重复所有代码。

我尝试创建自己的特征“Computables”,然后扩展到其他类 Int、Long 等,但编译器抱怨“...无法扩展最终类 Int”

这可能吗?我错过了什么吗?

generics scala class function

3
推荐指数
2
解决办法
97
查看次数

标签 统计

class ×1

function ×1

generics ×1

scala ×1