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
نصائح أخرى
هل هناك أي سبب يجعل عليك أن ترسم خريطة مرتين؟ ما المشكلة في ذلك:
data |> List.map (fun x -> (float x) * 1.0<m>)