gpt4 book ai didi

scala - 以 Shapeless 形式返回大小为 n 的列表的方法

转载 作者:行者123 更新时间:2023-12-02 23:21:50 25 4
gpt4 key购买 nike

下面的代码可以运行吗?

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

我收到一个编译错误,提示“无法找到参数 toIntN 的隐式值:shapeless.ToInt[N]”。

最佳答案

您只需添加上下文绑定(bind)即可:

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

这给了我们:

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

请注意,您可以使用 wrap 将其编写为或多或少等效于以下内容:

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

更新:Shapeless 2.2.0 版本:

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

关于scala - 以 Shapeless 形式返回大小为 n 的列表的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11849185/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com