Scala 一些列表规格2匹配器
为什么下面的方法不起作用Scala 一些列表规格2匹配器,scala,specs2,Scala,Specs2,为什么下面的方法不起作用 Some(List()) must beSome(Nil) “Some(List())”是Some,但List()不等于“org.specs2.matcher.ValueChecks$$anon”$3@480ba116“注意 Some(List()) must beSome(List()) 也不行 'Some(List())' is Some but List() is not equal to 'org.specs2.matcher.ValueChecks$
Some(List()) must beSome(Nil)
“Some(List())”是Some,但List()不等于“org.specs2.matcher.ValueChecks$$anon”$3@480ba116“注意
Some(List()) must beSome(List())
也不行
'Some(List())' is Some but List() is not equal to
'org.specs2.matcher.ValueChecks$$anon$4@48d1978f'
Actual: List()
Expected: org.specs2.matcher.ValueChecks$$anon$4@48d1978f
所以问题不是Nil
我们知道我们真正做的是:
Some(List()).must(beSome(List()))
问题似乎出在beSome
上。让我们看看beSome返回了什么:
val bl = beSome(List()) // SomeCheckedMatcher[Int]
val bn = beSome(Nil) // SomeCheckedMatcher[Int]
由于返回类型类似于正在检查整数的选项,因此这种情况不正确:
val b = beSome(2) // SomeCheckedMatcher[Int]
这些不是我们的目标类型:
val myList = List() // myList: List[Nothing] = List()
val myList2 = Nil // myList2: scala.collection.immutable.Nil.type = List()
那么,怎么了
查看,您可以使用以下方法:
检查某个元素是否为beSome
Some()
检查元素是否为beSome(exp)
Some(exp)
检查a满足匹配器的元素是否是beSome(matcher)
Some(a)
检查元素是否是beSome(函数:A=>AsResult[B])
,其中Some(A)
返回一个成功的函数(A)
结果(注意 a
也是一个函数Seq[a]
序列包含在一些需要使用匹配器的文件中:Int=>a
beSome(==(Seq(1))
List()
类似于Seq
,一个来自Int=>a的函数。在我们的示例中:
val myList = List() // myList: List[Nothing] = List()
val func: Int => Nothing = myList // func: Int => Nothing = List()
要解决这个问题,我们应该使用matcher(文档的第三个备选方案):
您是否尝试过这样的操作:Some(List[TYPE].empty)必须是Some(List[TYPE].empty),即显式使用类型构造函数来创建给定类型的列表?我确认
Some(List[Int]())必须是Some(List[Int]())
工作正常。
Some(List()) must beSome(beEqualTo(List()))
Some(List()) must beSome(beEqualTo(Nil))
// or
Some(List()) must beSome(be_==(List()))
Some(List()) must beSome(be_==(Nil))