{def unapply(x: Event): Option[TextField]}
, , , unapply [TextField] .
Duck typing, :
def foo(canQuack: {def quack(): Unit}) = {
canQuack.quack()
}
object Bar{
def quack(): Unit = print("quack")
}
object Baz{
def bark(): Unit = print("bark")
}
foo(Bar)
foo(Baz)
type StructuralType = {def unapply(x: Event): Option[TextField]}
val ValueChanged: StructuralType
val ValueChanged Type StructuralType, , , .
,
trait SwingApi {
...
val ValueChanged: {
def unapply(x: Event): Option[TextField]
}
...
}
, SwingApi /, val ValueChanged , , unapply
trait SwingApi {
val ValueChanged: {
def unapply(x: Event): Option[TextField]
}
}
//works:
object Bar extends SwingApi{
val ValueChanged = {
def unapply(x: Event): Option[TextField] = None
}
}
//compile error:
object Baz extends SwingApi{
val ValueChanged = {
//wrong name
def foo(x: Event): Option[TextField] = None
}
}
//compile error:
object Baz2 extends SwingApi{
val ValueChanged = {
//wrong input/output type
def unapply(): Unit = {}
}
}