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的工作

在香草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))