scala – 如何约束参数定义中列表的最大长度?

前端之家收集整理的这篇文章主要介绍了scala – 如何约束参数定义中列表的最大长度?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的一个函数是从零到五个整数参数以及从零到五个字符串参数.所以我认为它定义为2个列表的函数:f(数字:List [Int],字符串: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相关文章