Scala 比较匹配器在混合数字类型上失败
在香草Scala中,以下断言通过Scala 比较匹配器在混合数字类型上失败,scala,scalatest,matcher,comparison-operators,Scala,Scalatest,Matcher,Comparison Operators,在香草Scala中,以下断言通过 assert(1D > 0F) assert(1F > 0) assert(1L > 0) assert(1 > 0.toShort) assert(1.toShort > 0.toChar) 然而,ScalaTest中的类似匹配器 例如,一种解决方法是使两侧的类型相同 1D shouldBe > (0D) 为什么它在Scala中工作,但在Scalatest中不工作,或者它的签名是什么 这使得它失败了?香草Scala的工作
assert(1D > 0F)
assert(1F > 0)
assert(1L > 0)
assert(1 > 0.toShort)
assert(1.toShort > 0.toChar)
然而,ScalaTest中的类似匹配器
例如,一种解决方法是使两侧的类型相同
1D shouldBe > (0D)
为什么它在Scala中工作,但在Scalatest中不工作,或者它的签名是什么
这使得它失败了?香草Scala的工作原理是自动类型转换,即将
0F
转换为0D
,这是许多语言中的常见做法
更有趣的问题是为什么应该是不起作用。去糖化食品及其产量
new AnyShouldWrapper[Double](leftSideValue = 1D,
pos = ???,
prettifier = ???)
.shouldBe(new ResultOfGreaterThanComparison[Double](right = 0D))
new AnyShouldWrapper[Double](leftSideValue = 1D,
pos = ???,
prettifier = ???)
.shouldBe(new ResultOfGreaterThanComparison[Float](right = 0F))
这会导致的重载实现应该是
。前一种情况发生,后一种情况发生
查看源代码后,似乎1D shouldBe>(0F)
实际编译的唯一原因是支持与shouldBe
关键字进行数组比较。有趣的是,1D应该是>0D
可以工作,而1D应该是>0F
不能编译
def >[T : Ordering] (right: T): ResultOfGreaterThanComparison[T]
new AnyShouldWrapper[Double](leftSideValue = 1D,
pos = ???,
prettifier = ???)
.shouldBe(new ResultOfGreaterThanComparison[Double](right = 0D))
new AnyShouldWrapper[Double](leftSideValue = 1D,
pos = ???,
prettifier = ???)
.shouldBe(new ResultOfGreaterThanComparison[Float](right = 0F))