是否可以以任意方式以类型安全的方式从元组中删除最后一个元素?
我想要这样的东西:
[A,B,C] abc = [a,b,c];
[A,B] ab = removeLast(abc);
答案 0 :(得分:4)
不,不幸的是,这是不可能的,原因是元组类型在类型系统中表示为Tuple
的实例化链接列表,但类型系统无法表达函数签名中的循环或递归。 (并且循环/递归几乎肯定会使类型系统不可判定。)
原则上我们可以在将来解决这个问题的一种方法是使用内置的原语type function来计算元组类型的最后一个元素类型。
由"原始" type function,我的意思是一个类型函数,它不能用语言本身编写,而是由编译器作为内置函数提供。
锡兰目前没有任何这类原始类型的功能,但还有其他几个类似的问题可以通过这种方式解决。