[英]odd isInstanceOf behavior in Scala
使用ScalaTest / FlatSpec庫,我正在使用功能狀態測試隨機數生成器的返回值類型:
it should "return (\"{someRandomNumber}\", rng2) on nonNegativeInt.map(_.toString)" in {
val s = RNG.map(RNG.nonNegativeInt)(_.toString)(rng)
assert(s.isInstanceOf[(Int, RNG)]) // WRONG but PASS!!
assert(s._2 !== rng)
}
現在,如果您注意到不正確的isInstanceOf[(Int, RNG)]
您會認為這會導致失敗,但是會成功。
下面的代碼演示只要元組具有正確的Arity,就可以通過:
it should "not work" in {
assert(("123", rng).isInstanceOf[(Int, RNG)]) // PASS
assert(("123", rng).isInstanceOf[(String, Nothing)]) // PASS
assert(("123", rng).isInstanceOf[(Exception, Array[_])]) // PASS
}
但是如果元組具有一個類型參數:
it should "also not work" in {
assert(("123").isInstanceOf[Int]) // FAIL
}
這里發生了什么? 我應該如何測試內部參數化類型?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.