在Play框架specs2测试中,我有这些线......
new WithApplication {
val homeResponse = route(FakeRequest(GET, "/")).get
val resultType = contentType(homeResponse)
resultType.must( beSome.which( _ == "text/html") )
}
^这是有效的,但当我拉" beSome.which(_ ==" text / html")"变成一个单独的变量......
new WithApplication {
val homeResponse = route(FakeRequest(GET, "/")).get
val resultType = contentType(homeResponse)
val textTypeMatcher = beSome.which( _ == "text/html")
resultType.must( textTypeMatcher )
}
^类型不匹配。
预期:匹配[Option [String]],实际:OptionLikeCheckedMatcher [Option,Nothing,Nothing] ^
这里发生了什么?
答案 0 :(得分:3)
在第一种情况下,它会根据resultType.must(
推断出类型,因为resultType是String
。但是当你分开它时,没有什么可以推断的,所以你会得到:
val textTypeMatcher = beSome.which( _ == "text/html")
=> OptionLikeCheckedMatcher[Option, Nothing, Nothing]
但如果您添加类型:beSome[String]
,则会再次获得正确的类型。
val textTypeMatcher = beSome[String].which( _ == "text/html")
=> OptionLikeCheckedMatcher[Option, String, String]
编辑:
你也可以这样做:
val textTypeMatcher: OptionLikeCheckedMatcher[Option, String, String] = beSome.which( _ == "text/html")
所以基本上,如果你给类型推断器一些东西,它会推断出_
必须是一个字符串。否则,Scala无法知道_
应该是一个字符串。