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)