Swift 您可以通过类型中数据的大小来约束类型吗?

Swift 您可以通过类型中数据的大小来约束类型吗?,swift,types,constraints,Swift,Types,Constraints,我在搞矩阵运算(这是我在近20年前做的第一个编程),我想用更现代的实践来重现我之前所做的一切 无论如何 矩阵运算的一个限制是,运算中涉及的矩阵的大小很重要 i、 e.对于加法,两个矩阵的大小必须相同。i、 e.M(i,j)+N(i,j)。只有当左矩阵的列数与右矩阵的行数相同时,乘法才有效,等等 我一直在寻找在编译时应用这些约束的方法,但我不确定这是否可行 我知道我可以为每种大小的矩阵创建不同的子类型(Matrix1x1、Matrix1x2、Matrix2x3,…),但这些子类型“相当多”,所以这

我在搞矩阵运算(这是我在近20年前做的第一个编程),我想用更现代的实践来重现我之前所做的一切

无论如何

矩阵运算的一个限制是,运算中涉及的矩阵的大小很重要

i、 e.对于加法,两个矩阵的大小必须相同。i、 e.M(i,j)+N(i,j)。只有当左矩阵的列数与右矩阵的行数相同时,乘法才有效,等等

我一直在寻找在编译时应用这些约束的方法,但我不确定这是否可行

我知道我可以为每种大小的矩阵创建不同的子类型(Matrix1x1、Matrix1x2、Matrix2x3,…),但这些子类型“相当多”,所以这是不可能的

我还可以在函数上使用一个先决条件,在执行任何操作之前检查输入矩阵的大小是否正确(有点像数组上的索引越界检查)

但是我想知道是否有一种方法可以将矩阵的
大小
应用于矩阵的
类型
。我想我以前没听说过这件事,但在完全放弃这个想法之前,我想核实一下

类似于当我创建矩阵时,它应用了一个事实,即它知道在那个点上矩阵的大小

函数定义可能看起来像

func-add(m:Matrix,n:Matrix)->Matrix

func乘法(m:Matrix,n:Matrix)->Matrix
//或者别的什么


其中,
i
j
不是泛型类型约束,而是大小约束。但这不是有效的语法,请给出我所想的大概意思。

遗憾的是,这在Swift中目前是不可能的。由于大小只能在运行时知道,即使从初始化时起它们是常量,类型系统也无法知道这些运行时值。这是,所以希望斯威夫特也能到达那里。@DávidPászor哦,太好了,谢谢!我很高兴我没有走错方向。是时候让我开始和哈斯克尔玩了被否决的选民是否愿意解释为什么这项议案被否决?很高兴更新这个问题。