2012-08-07 3 views
7
zurückgibt

Ist es möglich, den folgenden Code funktionieren zu lassen?Methode, die Liste der Größe n in Shapeless

def zeroTo[N <: Nat]:Sized[List[Int], N] = { 
    new Sized[List[Int], N](List.iterate(0, toInt[N])(1+)) { 
    type A = Int 
    } 
} 

ich einen Compiler-Fehler sagen "impliziten Wert nicht für die Parameter toIntN finden konnte: shapeless.ToInt [N]".

Antwort

9

können Sie fügen Sie einfach einen Kontext gebunden:

def zeroTo[N <: Nat: ToInt]: Sized[List[Int], N] = { 
    new Sized[List[Int], N](List.iterate(0, toInt[N])(1+)) { 
    type A = Int 
    } 
} 

Was uns gibt:

scala> zeroTo[_6] 
res0: shapeless.Sized[List[Int],shapeless.Nat._6] = List(0, 1, 2, 3, 4, 5) 

Beachten Sie, dass Sie diese mehr schreiben oder weniger in äquivalenter Weise wie die folgenden mit wrap:

def zeroTo[N <: Nat: ToInt]: Sized[List[Int], N] = 
    Sized.wrap(List.iterate(0, toInt[N])(1+)) 

Update: Version für r Formlos 2.2.0:

def zeroTo[N <: Nat: ToInt]: Sized[List[Int], N] = { 
    Sized.wrap[List[Int], N](List.iterate(0, toInt[N])(1+)) 
} 
Verwandte Themen