如何让我的重载构造函数接受任何数字类型?

麦克风

我有一个CoordVector接受的类,我在别处定义的类Vector[ComplexNumber]在哪里ComplexNumber,并且我也将它覆盖为接受Vector[Double]但我希望覆盖改为接受 Scala 中的任何数字类型。

这是我当前的代码

case class RealVector(vector: Vector[Double])
case class ComplexVector(vector: Vector[ComplexNumber])

import scala.language.implicitConversions
implicit def dv(vector: Vector[Double]) = RealVector(vector)
implicit def cv(vector: Vector[ComplexNumber]) = ComplexVector(vector)

object CoordVector {
    def apply(components:RealVector):CoordVector = {
        new CoordVector(components.vector.map(c => ComplexNumber(c, 0)))
    }
}

case class CoordVector(val components:ComplexVector) {
    ...
}

不幸的是,我不能只替换DoubleNumeric,但有一个简单的方法来做到这一点,而无需创建一个新的implicit def,并apply为每个数字类型?

jwvh

看看这是否符合您的要求。

class ComplexNumber(a:Double, b:Double) // put here just to make the rest compile

case class RealVector[N:Numeric](vector: Vector[N])
case class ComplexVector(vector: Vector[ComplexNumber])

import scala.language.implicitConversions
implicit def dv[N:Numeric](vector: Vector[N]) = RealVector(vector)
implicit def cv(vector: Vector[ComplexNumber]) = ComplexVector(vector)

object CoordVector {
  def apply[N:Numeric](components:RealVector[N]):CoordVector = {
    new CoordVector(components.vector.map(c =>
      new ComplexNumber(implicitly[Numeric[N]].toDouble(c), 0)))
  }
}

case class CoordVector(components:ComplexVector) {
  ???
}

这允许所有底层数字数据,Double但您可以RealVector使用类型为Vector[Int]、 or Vector[Long]、 orVector[Float]的构造函数参数创建实例

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何采用任何构造函数类型并将其转换为接受相同参数的函数类型?

来自分类Dev

我可以创建一个多态的 `mult` 函数,它接受任何数字类型吗?

来自分类Dev

我应该如何重载构造函数

来自分类Dev

如何使构造函数接受所有类型的迭代器?

来自分类Dev

如何使Rust函数接受任何浮动类型作为参数

来自分类Dev

如何创建重载的构造函数?

来自分类Dev

两种类型的构造函数重载

来自分类Dev

在Powershell构造函数中按类型重载?

来自分类Dev

TypeScript 构造函数重载返回不同的类型

来自分类Dev

如何让我的函数接受不同类型的输入?

来自分类Dev

接受除“ AnyVal”以外的任何类型的函数?

来自分类Dev

我如何重载函数以接受异步和同步版本的回调参数

来自分类Dev

打字稿:如何重载构造函数?

来自分类Dev

签名重叠时如何重载构造函数?

来自分类Dev

如何验证重载构造函数上的输入?

来自分类Dev

如何扩展randomHuman构造函数以接受两种类型的对象?

来自分类Dev

TypeError:此构造函数不接受任何参数

来自分类Dev

TypeError:此构造函数在Django中不接受任何参数

来自分类Dev

子类构造函数拒绝接受任何名称-值参数

来自分类Dev

unittest- TypeError:此构造函数不接受任何参数

来自分类Dev

我们如何在C ++中从子类中调用父级重载的构造函数?

来自分类Dev

如何编写接受单个参数的构造函数?

来自分类Dev

当我只重载它以接受 Rational 类型的参数时,我的 Rational Number 类如何使用 += 和 long long 参数?

来自分类Dev

如何实现接受任何容器类型的功能?

来自分类Dev

如何键入同时接受联合和该联合的任何类型的提示函数?

来自分类Dev

如何使函数接受任何类型(不一定是对象)?

来自分类Dev

我如何创建一个接受可变数量的int的C ++构造函数

来自分类Dev

我如何创建一个接受可变数量的int的C ++构造函数

来自分类Dev

用Java中的泛型类型重载构造函数

Related 相关文章

  1. 1

    如何采用任何构造函数类型并将其转换为接受相同参数的函数类型?

  2. 2

    我可以创建一个多态的 `mult` 函数,它接受任何数字类型吗?

  3. 3

    我应该如何重载构造函数

  4. 4

    如何使构造函数接受所有类型的迭代器?

  5. 5

    如何使Rust函数接受任何浮动类型作为参数

  6. 6

    如何创建重载的构造函数?

  7. 7

    两种类型的构造函数重载

  8. 8

    在Powershell构造函数中按类型重载?

  9. 9

    TypeScript 构造函数重载返回不同的类型

  10. 10

    如何让我的函数接受不同类型的输入?

  11. 11

    接受除“ AnyVal”以外的任何类型的函数?

  12. 12

    我如何重载函数以接受异步和同步版本的回调参数

  13. 13

    打字稿:如何重载构造函数?

  14. 14

    签名重叠时如何重载构造函数?

  15. 15

    如何验证重载构造函数上的输入?

  16. 16

    如何扩展randomHuman构造函数以接受两种类型的对象?

  17. 17

    TypeError:此构造函数不接受任何参数

  18. 18

    TypeError:此构造函数在Django中不接受任何参数

  19. 19

    子类构造函数拒绝接受任何名称-值参数

  20. 20

    unittest- TypeError:此构造函数不接受任何参数

  21. 21

    我们如何在C ++中从子类中调用父级重载的构造函数?

  22. 22

    如何编写接受单个参数的构造函数?

  23. 23

    当我只重载它以接受 Rational 类型的参数时,我的 Rational Number 类如何使用 += 和 long long 参数?

  24. 24

    如何实现接受任何容器类型的功能?

  25. 25

    如何键入同时接受联合和该联合的任何类型的提示函数?

  26. 26

    如何使函数接受任何类型(不一定是对象)?

  27. 27

    我如何创建一个接受可变数量的int的C ++构造函数

  28. 28

    我如何创建一个接受可变数量的int的C ++构造函数

  29. 29

    用Java中的泛型类型重载构造函数

热门标签

归档