F#の測定単位-「持ち上げる」値がフロートする<何か>
-
03-07-2019 - |
質問
csvファイルから数値をインポートするとき、単位を使用して浮動小数点数に変換する必要があります。
現在、インライン関数を使用してこれを実行しています:
data |> List.map float |> List.map (fun n -> n * 1.0<m>)
しかし、これを行うためのよりエレガントな方法があるかどうか疑問に思っています-または変換関数で独自の「ユニット」モジュールを作成する必要がありますか?
本当に素晴らしいのはこのようなものですが、可能性はないのですが...
data |> List.map float |> List.map lift<m>
これは前の質問の反対です(方法F#の測定単位を一般的に削除するには)。
更新:自家製のユニットの場合、これを試してみましたが、うまくいきます:
[<Measure>]
type km =
static member lift (v:float) = v * 1.0<km>
data |> List.map float |> List.map km.lift
または、この回答
data |> List.map (float >> km.lift)
解決
現時点では、測定単位を型パラメーターにすることはできません(これが変更されるかどうかはわかりません)。したがって、これを記述する最短の方法は次のとおりです。
data |> List.map float |> List.map ((*) 1.0<m>)
編集
こちらもご覧ください FloatWithMeasure
こちら
http://msdn.microsoft.com/ en-us / library / ee806527(VS.100).aspx
他のヒント
2回マッピングする必要がある理由はありますか?これの何が問題なのですか:
data |> List.map (fun x -> (float x) * 1.0<m>)
所属していません StackOverflow