F # как я могу установить длину массива в типе делкарации - PullRequest
4 голосов
/ 07 декабря 2010

Я могу сделать (массив x: int)

Но мне нужен массив только из 300 элементов, так как мне (x: int [300])?

Не могу найти такую ​​информацию через msdn)

@ Марсело Кантос Нет причин, но я всегда использовал массивы размеров. Почему нет?

1 Ответ

3 голосов
/ 07 декабря 2010

Нет .Система типов F # не поддерживает такие типы, как «массив размером 300», и даже если она это сделала, использование системы типов для проверки потенциальных переполнений массива во время компиляции слишком непрактично для реализации.

Кроме того, «иметь ровно 300 элементов» - это бесполезное свойство в F # практически во всех ситуациях, потому что существует множество функций и примитивов, которые работают с массивами произвольного размера без риска переполнения (mapили iter, например).Зачем писать код, который работает для 300 элементов, если вы можете так же легко написать код, который работает для любого количества элементов?

Если вам действительно нужно представить свойство «имеет ровно 300 элементов», самое простое, что вы можете сделать, это создать тип-оболочку вокруг собственного типа массива.Это позволяет ограничить те операции, которые возвращают массивы, только теми операциями, которые относятся к инварианту из 300 элементов (например, map из другого массива из 300 элементов или create, где свойство length всегда 300).Боюсь, что это не так просто, как вы надеялись, но поскольку F # изначально не поддерживает массивы из 300 элементов, вам нужно будет самостоятельно описать все инварианты функций.

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