如何解决哪种编程语言静态地检查可变长度类的长度?
存在哪些静态类型化编程语言,可以静态推断和检查数组,列表...的长度?考虑下面的工作C#示例,这将很有用:
using System.IO;
using System;
using System.Diagnostics;
using System.Linq;
public class Program
{
public static void Main()
{
string[] arrayofstrings1 = { "the","quick","brown","fox","jumps" };
var arrayofstrings2 = functionOnArray(arrayofstrings1);
for (int i = 0; i < arrayofstrings1.Length; i++){
var string1 = arrayofstrings1[i];
var string2 = arrayofstrings2[i];
// do anything here
}
}
static string[] functionOnArray(string[] arrayofstrings){
return arrayofstrings.Skip(1).ToArray();
}
}
这在第5次迭代时失败,因为arrayofstrings2.Length只有4:
[system.indexOutOfRangeException:索引超出数组的范围。] 在Program.Main()处:第14行
如果该语言可以事先检查arrayofstrings2.Length = arrayofstrings1.Length-1,则可以在运行时之前知道循环将失败。这样可以防止某些运行时错误,从而使编程更容易。
关于在运行前进行检查的可能性: C#已经在运行时之前检查了是否可以将可为空的变量转换为非可空版本之前是否已检查了可空性。只需在if条件中进行检查就足够了,因此它可以在运行时以某种方式推断出变量的可能值的函数结果(此处为if条件)。可以用与静态检查变量长度相同的方法来实现。
解决方法
是的,这是可能的,它称为“从属类型”。有一些支持该功能的学术语言,例如Idris。
我不认为它可以在任何主流商业语言中使用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。