Scala构造函数重载参数未生效

Scala构造函数重载参数未生效,scala,unit-testing,constructor,scalatest,constructor-overloading,Scala,Unit Testing,Constructor,Scalatest,Constructor Overloading,我试图理解我实现构造函数重载的方式有什么问题。我想在具有相同名称的成员的类中添加一个接受参数count的构造函数 我们的想法是从一个默认构造函数参数计算count,除非它通过重载构造函数传递。我稍后会显示代码 为了让自己相信这是可行的,我构建了一个快速简单的测试: import org.scalatest.FunSuite 类构造函数OverloadTest扩展了FunSuite{ 测试(“重载参数阴影类成员”){ val实际值=新测试值(200).长度 200==实际值 1!==实际值 } 类

我试图理解我实现构造函数重载的方式有什么问题。我想在具有相同名称的成员的类中添加一个接受参数
count
的构造函数

我们的想法是从一个默认构造函数参数计算
count
,除非它通过重载构造函数传递。我稍后会显示代码

为了让自己相信这是可行的,我构建了一个快速简单的测试:

import org.scalatest.FunSuite
类构造函数OverloadTest扩展了FunSuite{
测试(“重载参数阴影类成员”){
val实际值=新测试值(200).长度
200==实际值
1!==实际值
}
类TestME(名称:String){
val length=name.length
定义此(长度:Int)={
此(“*”)
}
}
}
测试如期通过。这让我明白重载构造函数参数
length
shadows/替换类成员
length

class TestME(name:String) {
  val length = name.length

  def this(length:Int) = {
    this("*")
  }
}

println(new TestME(200).length)
但当我在另一个类中执行相同操作时,该类成员不会被隐藏/替换

class MyClass(input1:Array[Float],input2:Array[Byte],input3:Array[Float]){
val count=input2.length
val指数=剂量测定法()
定义此(计数:Int)={
这(数组(),数组(),数组())
}
def printCount()={
如果(this.count==0)
println(“零”)
其他的
println(“其他”)
}
}
当我使用这个类时,如下所示

val myInstance=new MyClass(200)
myInstance.printCount()
我希望它能在屏幕上打印
OTHER
。相反,它会打印
ZERO


为什么?

您的测试似乎有问题
newtestme(200).length
返回
1
,表示构造函数参数实际上没有覆盖
length

class TestME(name:String) {
  val length = name.length

  def this(length:Int) = {
    this("*")
  }
}

println(new TestME(200).length)
佩尔的评论:

  • 测试的断言应包装在
    assert
    中:

    // Closer to correct...
    assert(200 === actual)
    assert(1 !==  actual)
    
  • 实际值和预期值应按以下顺序传递:

    // Correct!
    assert(actual === 200)
    assert(actual !== 1)
    

  • 谢谢这个测试确实是错误的。它应该是
    assert(200==actual)
    ,然后测试失败|感觉自己很笨|@summerbull啊,这是有道理的。别担心,额外的眼睛总是有帮助的!如果更准确一点,实际值和预期值的顺序是相反的:
    assert(实际值==200)