开发者

F# how can I setup array length in type delcaration

开发者 https://www.devze.com 2023-01-29 01:36 出处:网络
I can do (x : int array) But I need only 300 elements array , so how do I (x : int[300]) ? Can\'t find such information 开发者_如何学Cover msdn )

I can do (x : int array)

But I need only 300 elements array , so how do I (x : int[300]) ?

Can't find such information 开发者_如何学Cover msdn )

@Marcelo Cantos No reason , but I always used sized arrays. Why not ?


No. The F# type system does not support types such as "array of size 300", and even if it did, using the type system to check potential array overflows at compile time is too impractical to implement.

Besides, "has exactly 300 elements" is an useless property in F# in almost all situations, because there is a wealth of functions and primitives that work on arrays of arbitrary size without any risk of overflow (map or iter, for instance). Why write code that works for 300 elements when you can just as easily write code that works for any number of elements ?

If you really need to represent the "has exactly 300 elements" property, the simplest thing you could do is create a wrapper type around the native array type. This lets you restrict those operations that return arrays to only operations that respect the 300-element invariant (such as a map from another 300-element array, or a create where the length property is always 300). I'm afraid this isn't as simple as you hoped, but since F# does not natively support 300-element arrays, you will need to describe all the function invariants yourself.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号