2016-09-20 4 views
0

Ich arbeite gerade an einem kleinen scala DSL für Android (https://github.com/bertderbecker/scalandroid).Scala: Wie implizite Konstruktorparameter überschrieben werden?

val drawerLayout = new SDrawerLayout { 
    openDrawerFrom = SGravity.LEFT 
    fitsSystemWindows = true 

    navigationView = new SNavigationView { 
     println(parent)       //None - the parent of the drawerlayout 
                  // I want that the parent is the drawerlayout 
     layout = SLayout.NAVI_HEADER_DEFAULT 
     fitsSystemWindows = true 
    } 
} 

Wie kann ich die SNavigationView sagen die SDrawerLayout als seine Eltern zu verwenden, nicht die Eltern des DrawerLayout?

Also, im Allgemeinen möchte ich eine Klasse foo (0) haben, die ein foo (-1) als impliziten Parameter und innerhalb Sie können ein foo (+1), die das foo (0) von Anfang an als impliziter Parameter.

So foo ist "rekursiv".

Was ich will, ist:

class foo()(implicit parent: foo) { 
    parent = this 
    val f = new Foo {  //takes this as its parent 

    } 
} 
+0

Verwendung implizite Methoden! –

Antwort

0

Eigenarten:

val drawerLayout = new SDrawerLayout {drawer => 
    openDrawerFrom = SGravity.LEFT 
    fitsSystemWindows = true 

    navigationView = new SNavigationView { 
    println(drawer.parent)       //None 
    layout = SLayout.NAVI_HEADER_DEFAULT 
    fitsSystemWindows = true 
    } 
}