2012-08-07 27 views

Trả lời

9

Bạn chỉ có thể thêm một bối cảnh bị ràng buộc:

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

nào cho chúng ta:

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

Lưu ý rằng bạn có thể viết này ít nhiều tương đương như sau sử dụng wrap:

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

Cập nhật: Phiên bản cho r Shapeless 2.2.0:

def zeroTo[N <: Nat: ToInt]: Sized[List[Int], N] = { 
    Sized.wrap[List[Int], N](List.iterate(0, toInt[N])(1+)) 
} 
Các vấn đề liên quan