Kim*_*bel 8 scala scala-2.10 shapeless
是否可以使以下代码有效?
def zeroTo[N <: Nat]:Sized[List[Int], N] = {
new Sized[List[Int], N](List.iterate(0, toInt[N])(1+)) {
type A = Int
}
}
Run Code Online (Sandbox Code Playgroud)
我收到一个编译错误,说"无法找到参数toIntN的隐含值:shapeless.ToInt [N]".
Tra*_*own 10
您只需添加上下文绑定:
def zeroTo[N <: Nat: ToInt]: Sized[List[Int], N] = {
new Sized[List[Int], N](List.iterate(0, toInt[N])(1+)) {
type A = Int
}
}
Run Code Online (Sandbox Code Playgroud)
这给了我们:
scala> zeroTo[_6]
res0: shapeless.Sized[List[Int],shapeless.Nat._6] = List(0, 1, 2, 3, 4, 5)
Run Code Online (Sandbox Code Playgroud)
请注意,您可以使用以下内容或多或少等效地编写此代码wrap:
def zeroTo[N <: Nat: ToInt]: Sized[List[Int], N] =
Sized.wrap(List.iterate(0, toInt[N])(1+))
Run Code Online (Sandbox Code Playgroud)
更新:Shapeless 2.2.0的版本:
def zeroTo[N <: Nat: ToInt]: Sized[List[Int], N] = {
Sized.wrap[List[Int], N]( List.iterate( 0, toInt[N] )( 1+ ) )
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
491 次 |
| 最近记录: |