为什么不使用ScalaTest 2.0.M5b进行编译?
import org.scalatest.matchers.MatchResult
import org.scalatest.matchers.BeMatcher
import org.scalatest.matchers.ShouldMatchers._
def sorted[T <% Ordered[T]] = new BeMatcher[Seq[T]] {
override def apply(s: Seq[T]) =
MatchResult(
s match {
case Seq(h, t@_*) => s.zip(t).forall{ case (x,y) => x < y }
case _ => true
},
s + " was not sorted",
s + " was sorted")
}
val s = Seq(1, 2, 3)
s should be (sorted[Int])这是我得到的错误:
overloaded method value should with alternatives: (beWord: NewCollectionsSpec.this.BeWord)NewCollectionsSpec.this.ResultOfBeWordForAnyRef[scala.collection.GenSeq[Int]] <and> (notWord:
NewCollectionsSpec.this.NotWord)NewCollectionsSpec.this.ResultOfNotWordForAnyRef[scala.collection.GenSeq[Int]] <and> (haveWord:
NewCollectionsSpec.this.HaveWord)NewCollectionsSpec.this.ResultOfHaveWordForSeq[Int] <and> (rightMatcher: org.scalatest.matchers.Matcher[scala.collection.GenSeq[Int]])Unit cannot be applied to
(org.scalatest.matchers.Matcher[Seq[Int]])发布于 2013-07-29 18:52:41
s: Seq[Int]被隐式转换为SeqShouldWrapper[GenSeq[Int]]。它没有与should兼容的Matcher[Seq[Int]]替代方案。但它有def should(rightMatcher: Matcher[GenSeq[T]])。因此,如果更改matcher类型约束,所有内容都会编译:
def sorted[T <% Ordered[T]] = new BeMatcher[GenSeq[T]] {
def apply(s: GenSeq[T]) =
MatchResult(
s match {
case Seq(h, t@_*) => s.zip(t).forall {
case (x, y) => x < y
}
case _ => true
},
s + " was not sorted",
s + " was sorted")
}发布于 2016-02-21 19:09:14
Scalatest已经提供了这样一个匹配器:
seq shouldBe sorted注意,类似的代码
seq should be sorted不编译。
https://stackoverflow.com/questions/17930718
复制相似问题