问题
I am calling external function requiring float[]
, but my array is float<m>[]
.
How could I strip the unit of measure from array?
I need something like the function below, but this does not compile.
And I would like to avoid any iterating or duplicating of the array, as float<m>
and float
values are identical...
let demeasure (arr:float<m>[]): float[] = float[] (arr)
回答1:
I believe that a cast to obj
, followed by a dynamic cast to float[]
would work, e.g.
(arr :> obj) :?> float[]
because there is no runtime representation.
Possibly see also
F# Units of measure - 'lifting' values to float<something>
How to generically remove F# Units of measure
回答2:
[<Measure>]type m
let f (arr : float[]) : float = 0.0
let arr = [|1.0<m>|]
f (unbox (box arr))
回答3:
let demeasure (arr: float[]) = arr |> Array.map (fun i -> float i)
来源:https://stackoverflow.com/questions/11404027/strip-unit-of-measure-from-array