Vanilla Scala работает благодаря автоматическому преобразованию типов, т. Е. 0F
приводится к 0D
, что является распространенной практикой во многих языках.
Более интересный вопрос, почему shouldBe
не работает. Осушение последствий дает
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))
, что приводит к перегруженным реализациям shouldBe
. В первом случае здесь , а во втором здесь .
После просмотра исходного кода кажется, что единственная причина, по которой 1D shouldBe > (0F)
фактически компилируется, - это поддержка сравнения массивов с ключевым словом shouldBe
.