ถ้าฉันใช้un unผนึกtrait
หรือabstract class
ใน Scala จากนั้นใช้การจับคู่รูปแบบฉันสงสัยว่าคอมไพเลอร์ไม่ทราบเวลาที่คอมไพล์สำหรับ patternmatch นี้โดยเฉพาะการใช้งานที่เป็นไปได้ของคุณลักษณะ / คลาสนี้มีอยู่หรือไม่ ดังนั้นถ้าเป็นเช่นนั้นมันจะไม่เตือนรูปแบบการจับคู่แม้ว่าtrait
/ abstract class
ไม่ได้ถูกปิดผนึกเพราะเขารู้ว่าสามารถใช้ประเภทใดได้โดยตรวจสอบการอ้างอิง / การนำเข้าที่เป็นไปได้ทั้งหมดหรือไม่
เช่นถ้าฉันมีOption[A]
และฉันจับคู่รูปแบบเฉพาะสำหรับSome[A]
แต่ไม่ได้สำหรับNone
คอมไพเลอร์จะบ่นเพราะOption
ถูกปิดผนึก
หากคอมไพเลอร์ไม่สามารถรู้ / แก้ปัญหานั้นทำไมเขาถึงทำไม่ได้? และถ้าคอมไพเลอร์ (ตามหลักวิชา) สามารถทำเช่นนั้นได้เหตุผลอะไรที่มันไม่ได้ใช้ใน Scala? มีภาษาอื่นที่สนับสนุนพฤติกรรมแบบนั้นหรือไม่?
Foo
กับ subclasses A
, B
และC
และทั้งหมดของการแข่งขันรูปแบบของคุณตรงกับเฉพาะผู้ที่สาม ไม่มีอะไรทำให้ฉันไม่สามารถเพิ่มคลาสย่อยใหม่D
ที่จะทำให้รูปแบบของคุณตรงกับความต้องการ
java.lang.ClassLoader
ผ่าน