In C# and Java a byte array can be created like this
byte[] b = new byte[x];
where x
denotes the size of the array. What I want to
let b = Array.create<byte> x 0uy //Array.zeroCreate<byte> x
What do you mean?
F# has a syntax different from C# and Java, you are using the Array
module to let him create an array with an initializer. Nothing strange, one language is functional while the other is imperative so these differences are indeed needed.
According to the F# language specs you can't declare something that is uninitialized (unless using specific patterns as the Option
type which are just exploits that allow you to express the uninitialized concept without really having it), that's why you have to pass an initializer for elements in the array.
I think you would want to create an uninitialized array and fill it later:
let arr = Array.zeroCreate 10
for i in 0..9 do
arr.[i] <- byte(i*i)
It's the way you normally do in C#/Java, which is unidiomatic in F#. Think about it; if you forget to initialize some elements, you have to deal with null
nightmares.
In almost all cases, you can always replace the above procedure by high-order functions from Array module or array comprehension:
let arr = Array.init 10 (fun i -> byte(i*i))
or
let arr = [| for i in 0..9 do -> byte(i*i)|]
Take a look at this MSDN page; it contains useful information about using Array in F#.
A closest F# analog would be Array.zeroCreate:
let b: byte [] = Array.zeroCreate x
Instead of implicit array elements initialization to 0
bytes on Java and C# platforms F# makes the initial value of array elements obvious.
As to dynamic size
of b
in F# it is defined once by x
value at the allocation and cannot be changed later by changing x
, similarly to C#/Java,.