gpt4 book ai didi

scala - 在通用 Scala 类中重载构造函数

转载 作者:行者123 更新时间:2023-12-04 05:34:39 25 4
gpt4 key购买 nike

我正在尝试在通用 scala 类中重载构造函数,但它没有编译。

这是我的代码:

class V[T](m: Map[T,Double]) {
def this(dt: Seq[Double]) = this(dt.zipWithIndex.map(_.swap).toMap)
}

我得到的错误信息:
ERROR: called constructor's definition must precede calling constructor's definition : line 6

ERROR: overloaded method constructor V with alternatives:
(dt: Seq[Double])V[T] <and> (m: Map[T,Double])V[T] cannot be applied to
(scala.collection.immutable.Map[Int,Double]) : line 6

据我了解 scala 中的构造函数重载,我认为我遵循正确的语法和对 this 的调用的限制。应该先于其他一切。

那么我做错了什么,我该如何解决这个问题?

最佳答案

def this(dt: Seq[Double]) = this(dt.zipWithIndex.map(_.swap).toMap)
  • 您正在创建新 map Map[Int,Double] ; IntzipWithIndex 创建的索引的类型.
  • 如果 TInt ,则可以使用构造函数(m:Map[T,Double] .
  • 但是: T 尚未绑定(bind)到类型,因为您正在定义类。类型匹配也不会绑定(bind)TInt在此刻。
  • 因此类型匹配失败。

  • 解决方案:
    如何修复它取决于您要执行的操作。
  • 如果是 T <: Int ,然后使用 <: Int 限制类型参数可以解决您的问题;但是,T 似乎不太可能是 Int 的子类...
  • 如果 T : Int 总是正确的,然后删除通用 T .
  • 如果 T是保持通用性和无界性,然后您就可以为 T : Int 提供特殊情况。 ; senia 的解决方案看起来不错。
  • 关于scala - 在通用 Scala 类中重载构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12112776/

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