scala – 如何约束参数定义中列表的最大长度?
发布时间:2020-12-16 18:03:14 所属栏目:安全 来源:网络整理
导读:我的一个函数是从零到五个整数参数以及从零到五个字符串参数.所以我认为它定义为2个列表的函数:f(数字:List [Int],字符串:List [String]).但是我认为如果可能的话,限制长度是好的,因为IDE和/或编译器可以强制执行它.这可能吗? 解决方法 我认为你真的要求
我的一个函数是从零到五个整数参数以及从零到五个字符串参数.所以我认为它定义为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)) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |