Когда вы пишете case EE2
в матче, он проверяет, подходящий объект для равенства с EE2
(заметим, что если идентификатор начала с строчной буквы, ответ Ли было бы правильно, это правило существует специально, чтобы сделать согласование object
s и константы, чьи имена обычно начинаются с прописных букв, имеют смысл). Но так как EE1
и EE2
оба расширения case class EE()
, они равны (вы можете напрямую проверить EE1 == EE2
или k == EE2
). Он работает как ожидалось, если вы сделаете их неравными by removing case
:
object Solution extends App {
class EE() { }
object EE1 extends EE
object EE2 extends EE
val k: EE = EE1
println(k.getClass) // class Solution$EE1$
println(k.isInstanceOf[EE2.type]) // returns FALSE
k match {
case EE2 => println("EE1 match EE2!!!") // MATCH THIS LINE/// WHY???
case EE1 => println("EE1 match EE1. OK!")
}
}
Processing...
Reused last reload result
[info] Loading project definition from /tmp/renderer9oHZD8Bvx9/project/project
[info] Loading project definition from /tmp/renderer9oHZD8Bvx9/project
[info] Set current project to rendererWorker (in build file:/tmp/renderer9oHZD8Bvx9/)
[info] Reapplying settings...
[info] Set current project to rendererWorker (in build file:/tmp/renderer9oHZD8Bvx9/)
[info] Formatting 1 Scala source {file:/tmp/renderer9oHZD8Bvx9/}rendererWorker(compile) ...
[info] Reformatted 1 Scala source {file:/tmp/renderer9oHZD8Bvx9/}rendererWorker(compile).
[info] Compiling 1 Scala source to /tmp/renderer9oHZD8Bvx9/target/classes...
[success] Total time: 4 s, completed Aug 19, 2015 1:13:04 PM
Now running...
[info] Running Solution
class Solution$EE1$
false
EE1 match EE1. OK!
[success] Total time: 0 s, completed Aug 19, 2015 1:13:04 PM