Можно ли ограничить тип размером данных в типе? - PullRequest
0 голосов
/ 13 февраля 2020

Я возился с матричными операциями (это было первое программирование, которое я когда-либо делал почти 20 лет go) и хотел воссоздать то, что я делал все это время go, но с более современными методами.

В любом случае ...

Одно из ограничений с матричными операциями состоит в том, что размер матриц, участвующих в операциях, имеет значение.

т.е. для сложения две матрицы должны быть из тот же размер. то есть M (i, j) + N (i, j). И умножение работает только в том случае, если количество столбцов в левой матрице совпадает с количеством строк в правой матрице и т. Д. c ...

Я искал способы применения этих ограничений. во время компиляции, но я не уверен, что это возможно.

Я знаю, что мог бы создать разные подтипы для каждого размера матрицы (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> // или что-то еще

Где i и j - это не общие ограничения типа c, а ограничения размера. Но это неверный синтаксис, просто дайте общее представление о том, что я думаю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...