将模数运算符应用于 Scala 泛型类型 class 成员?
apply modulus operator to Scala generic type class member?
所以我有以下内容 class:
class MyClass[T] {
var data: T = _
def isEven: Boolean = {
if (this.data % 2 == 0) return true
false
}
}
Scala 不允许我在这里取模,因为不能保证类型“T”将是数字。
所以我的问题是如何 运行 这个?
我想让 MyClass 拥有任何类型的数字数据类型,如 Int、Float、Double 等
有一个名为 Numeric
的类型 class,位于包 scala.math
中。 class 提供了一些功能,数字(如 Int、Double 等)必须具有这些功能,例如,它们可以取反,或者它们必须能够转换为 Int,以及许多其他功能,See the docs here.
所以我建议你这样做:
import scala.math.Numeric
class MyClass[T : Numeric] {
var data: T = _
private final val num: Numeric[T] = implicitly
def isEven: Boolean = num.toDouble(data) % 2 == 0
}
Scala 已经为 Int、BigInt、Char、BigDecimal 等某些类型实现了 Numeric
。因此,如果您使用其中一种标准类型,就没问题,但如果您打算使用您自己定义的某种类型,请考虑实施 Numeric[YourType]
.
另外尽量不要使用var
.
所以我有以下内容 class:
class MyClass[T] {
var data: T = _
def isEven: Boolean = {
if (this.data % 2 == 0) return true
false
}
}
Scala 不允许我在这里取模,因为不能保证类型“T”将是数字。
所以我的问题是如何 运行 这个? 我想让 MyClass 拥有任何类型的数字数据类型,如 Int、Float、Double 等
有一个名为 Numeric
的类型 class,位于包 scala.math
中。 class 提供了一些功能,数字(如 Int、Double 等)必须具有这些功能,例如,它们可以取反,或者它们必须能够转换为 Int,以及许多其他功能,See the docs here.
所以我建议你这样做:
import scala.math.Numeric
class MyClass[T : Numeric] {
var data: T = _
private final val num: Numeric[T] = implicitly
def isEven: Boolean = num.toDouble(data) % 2 == 0
}
Scala 已经为 Int、BigInt、Char、BigDecimal 等某些类型实现了 Numeric
。因此,如果您使用其中一种标准类型,就没问题,但如果您打算使用您自己定义的某种类型,请考虑实施 Numeric[YourType]
.
另外尽量不要使用var
.