【问题标题】:overloaded method should with alternatives:重载方法应该有替代方案:
【发布时间】:2021-09-12 07:14:48
【问题描述】:

我正在尝试在 intellij 中执行以下代码并出现错误。请帮忙

代码

package retcalc

object RetCalc extends App {
  def futureCapital(interestRate: Double, nbOfMonths: Int, netIncome: Int, currentExpenses:
  Int, initialCapital: Double): Double = {
    val monthlySavings = netIncome - currentExpenses

    def nextCapital(accumulated: Double, month: Int): Double =
      accumulated * (1 + interestRate) + monthlySavings

    (0 until nbOfMonths).foldLeft(initialCapital)(nextCapital)
  }
}

测试用例

package retcalc

import org.scalactic.{Equality, TolerantNumerics, TypeCheckedTripleEquals}
import org.scalatest.{Matchers, WordSpec}

class RetCalcSpec extends WordSpec with Matchers with TypeCheckedTripleEquals {

  implicit val doubleEquality: Equality[Double] =
    TolerantNumerics.tolerantDoubleEquality(0.0001)

  "RetCalc.futureCapital" should {
    "calculate the amount of savings I will have in n months" in {
      val actual = RetCalc.futureCapital(
        interestRate = 0.04 / 12, nbOfMonths = 25 * 12,
        netIncome = 3000, currentExpenses = 2000,
        initialCapital = 10000)
      val expected = 541267.1990
      actual should ===(expected)
    }
  }
}

错误

overloaded method should with alternatives:
  (inv: org.scalautils.TripleEqualsInvocationOnInterval[Double])Unit <and>
  [U](inv: org.scalautils.TripleEqualsInvocation[U])(implicit constraint: org.scalautils.EqualityConstraint[Double,U]): Unit <and>
  (notWord: RetCalcSpec.this.NotWord)RetCalcSpec.this.ResultOfNotWordForNumeric[Double] <and>
  (rightMatcherGen1: RetCalcSpec.this.MatcherGen1[Double,org.scalautils.Equality])(implicit equality: org.scalautils.Equality[Double]): Unit <and>
  (rightMatcherX3: org.scalatest.matchers.Matcher[Double])Unit
 cannot be applied to (org.scalactic.TripleEqualsSupport.TripleEqualsInvocation[Double])
      actual should ===(expected)

----scalaVersion := "2.13.6"----

【问题讨论】:

  • 我似乎无法复制该问题。您使用的是什么版本的 scalates?
  • 感谢您的回复,请找到 sbt 依赖项: libraryDependencies += "org.scalatest" % "scalatest_2.10" % "2.0.M6-SNAP8" 我在上面使用是因为,在下面我是无法导入 Matchers 和 WordSpec libraryDependencies += "org.scalactic" %% "scalactic" % "3.2.9" libraryDependencies += "org.scalatest" %% "scalatest" % "3.2.9" % "test"跨度>

标签: scala scalatest


【解决方案1】:

我认为=== 在这里不是可用的匹配器。

最后一行应该是:

actual shouldBe expected

【讨论】:

  • 感谢您的回复,
  • 应该 === 在编译时确保相等的两边具有相同的类型。但是我尝试了实际应该预期的......得到以下错误。请指教:
  • 不能覆盖没有被两者覆盖的第三个成员的具体成员(此规则旨在防止意外覆盖) override def convertToEqualizer[T](left: T): org.scalautils.Equalizer[T ](在特征 LegacyTripleEquals 中定义)并覆盖 def convertToEqualizer[T](left: T):RetCalcSpec.this.Equalizer[T](在特征 TypeCheckedTripleEquals 中定义);其他有覆盖错误的成员是:convertToCheckingEqualizer, defaultEquality, ===, !== class RetCalcSpec extends WordSpec with Matchers with TypeCheckedTripleEquals{
【解决方案2】:

下面我无法导入 Matchers 和 WordSpec

Scala 3.2.x 经历了模块化过程,因此导入发生了一些变化,因此

libraryDependencies += "org.scalatest" %% "scalatest" % "3.2.9" % "test"

尝试以下导入

import org.scalactic.{Equality, TolerantNumerics, TypeCheckedTripleEquals}
import org.scalatest.wordspec.AnyWordSpec
import org.scalatest.matchers.should.Matchers

class RetCalcSpec extends AnyWordSpec with Matchers with TypeCheckedTripleEquals { ...

我也无法在 ScalaTest 3.1.0 中复制该问题,因此如果您希望保留当前的导入,可以尝试该预模块化版本。

【讨论】:

    猜你喜欢
    • 2015-07-05
    • 2018-02-17
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-18
    • 1970-01-01
    相关资源
    最近更新 更多