首页 > 解决方案 > 您可以通过类型中数据的大小来约束类型吗?

问题描述

我正在搞乱矩阵运算(这是我近 20 年前做过的第一个编程),并想用更现代的实践重新创建我之前所做的一切。

反正...

矩阵运算的约束之一是运算中涉及的矩阵的大小很重要。

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

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

我知道我可以为每种大小的矩阵(Matrix1x1、Matrix1x2、Matrix2x3,...)创建不同的子类型,但其中有“相当多”,所以这不是首发。

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

但我想知道是否有一种方法可以将size矩阵的 应用于type矩阵的 。我想我以前没有听说过这个,但想在完全放弃这个想法之前检查一下。

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

函数定义可能看起来像......

func add(m: Matrix<i, j>, n: Matrix<i, j>) -> Matrix<i, j>

func multiply(m: Matrix<i, j>, n: Matrix<k, i>) -> Matrix<j, k>// 或者其他的东西

whereij不是泛型类型约束,而是大小约束。但这不是有效的语法,只是给出了我在想什么的一般概念。

标签: swifttypesconstraints

解决方案


推荐阅读