gpt4 book ai didi

scala - 如何在参数定义中限制列表的最大长度?

转载 作者:行者123 更新时间:2023-12-05 00:02:14 25 4
gpt4 key购买 nike

我的一个功能是从零到五个整数参数和从零到五个字符串参数。所以我认为它定义为 2 个列表的函数:f(numbers: List[Int], strings: List[String]) .但我认为如果可能的话,最好限制长度,因为 IDE 和/或编译器可以强制执行它。这可能吗?

最佳答案

我认为您真的为此需要很多类型系统...这是依赖类型编程的经典任务,不幸的是 Scala 不属于该类别。

你可以看看Mark Harrah's type-level Naturals :

type _0 = Nat0
type _1 = Succ[_0]
type _2 = Succ[_1]
// ...

但是如果你沿着这条路走下去,你必须以这样一种方式构建你的所有列表,即长度类型对编译器来说是显而易见的。这意味着没有递归,没有无限循环等。此外,您还必须想出一种方法来在类型系统中对“<”进行编码……因为您不能进行递归,我不确定您是怎么做的去做。所以,可能不值得。

也许解决这个问题的另一种方法是找出 '0..5' 来自哪里并基于该信息限制其他类型?

作为最后的手段,您可以为允许的大小定义特殊情况,将它们分开,以便您没有 25 个情况:
case class Small[+X](l: List[X])

def small(): Small[Nothing] = Small(List())
def small[A](a: A): Small[A] = Small(List(a))
def small[A](a1: A, a2: A): Small[A] = Small(List(a1,a2))

关于scala - 如何在参数定义中限制列表的最大长度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8198997/

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