Come ha detto James, non è possibile. Il suo cheat mi fa sanguinare gli occhi, e suggerisco invece di fare qualcos'altro ;-)
Consiglio vivamente di modificare i consumatori di bop se è possibile. Piuttosto che consegnando loro un'istanza Bippy # Boppy, consegnarle una coppia comprendendo il valore del tipo dipendente e il valore che il tipo dipende,
trait DependentPack {
val bippy : Bippy
val boppy : bippy.Boppy
}
val bip = new Bippy
val bop = bip.bop
val dep = new DependentPack { val bippy = bip ; val boppy = bop }
foo(dep)
def foo(dp : DependentPack) = {
import dp._
// use bippy ...
// use boppy ...
}
noti che questa è in parte una soluzione per la mancanza di tipi di metodi dipendenti (abilitati in scalac aggiungendo i metodi -Ydependent-method-type o -Xexperimental command line). Se li avessimo, potremmo cadere manufatti come DependentPack e riscrivere quanto sopra,
val bip = new Bippy
val bop = bip.bop
foo(bip)(bop)
def foo(bippy : Bippy)(boppy : bippy.Boppy) = {
// use bippy ...
// use boppy ...
}
Inutile dire, io che avere tipi di metodo dipendenti abilitati per default sarebbe altamente desiderabile. Gli usi non banali dei tipi dipendenti portano con sé un mondo di dolore in loro assenza, a meno che tu non stia molto attento.
fonte
2011-02-07 23:32:29
È la soluzione che sto già usando :) Ma come sembra non ci sia modo migliore, si ottiene il segno di spunta verde, gli occhi sanguinanti e tutto! –