มันเป็นความจริงที่น่าเศร้าของชีวิตใน Scala ที่ว่าถ้าคุณยกตัวอย่าง List [Int] คุณสามารถตรวจสอบว่าอินสแตนซ์ของคุณเป็น List และคุณสามารถตรวจสอบได้ว่าองค์ประกอบใด ๆ ของมันเป็น Int แต่ไม่ใช่ว่าเป็น List Int] ตามที่สามารถตรวจสอบได้ง่าย:
scala> List(1,2,3) match {
| case l : List[String] => println("A list of strings?!")
| case _ => println("Ok")
| }
warning: there were unchecked warnings; re-run with -unchecked for details
A list of strings?!
ตัวเลือก -Checked ทำให้ตำหนิอย่างเต็มที่ในการลบประเภท:
scala> List(1,2,3) match {
| case l : List[String] => println("A list of strings?!")
| case _ => println("Ok")
| }
<console>:6: warning: non variable type-argument String in type pattern is unchecked since it is eliminated by erasure
case l : List[String] => println("A list of strings?!")
^
A list of strings?!
ทำไมเป็นอย่างนั้นและฉันจะไปรอบ ๆ มันได้อย่างไร
scala 2.10.2
ฉันเห็นคำเตือนนี้แทน: <console>:9: warning: fruitless type test: a value of type List[Int] cannot also be a List[String] (but still might match its erasure) case list: List[String] => println("a list of strings?") ^
ฉันพบว่าคำถามและคำตอบของคุณมีประโยชน์มาก แต่ฉันไม่แน่ใจว่าคำเตือนที่อัปเดตนี้มีประโยชน์ต่อผู้อ่านหรือไม่