1
考慮:瞭解相關類型
scala> sealed trait Parent
defined trait Parent
scala> case object Boy extends Parent
defined object Boy
scala> case object Girl extends Parent
defined object Girl
scala> trait F {
| type A
| def x: A
| }
defined trait F
scala> case object FImpl extends F {
| override type A = Parent
| def x: Parent = Boy
| }
defined object FImpl
然後我定義的方法:
scala> def foobar(f: F)(matcher: f.A => Boolean): Boolean =
| matcher(f.x)
foobar: (f: F)(matcher: f.A => Boolean)Boolean
scala> foobar(FImpl)(_ match { case Boy => true; case Girl => false})
res3: Boolean = true
我很困惑,如何工作的。編譯器在編譯時必須知道f.A
的類型嗎?
不確定你在問什麼。你期望這不會編譯? –
@ m-z - Owen很好地捕捉到了我不清楚的問題 - 「當f是運行時值時,編譯器如何看到成員f.A?' –