簡體   English   中英

F#獲取模塊成員

[英]F# Get Members of Module

給定

type Unit = {
            Name : string
            Abbreviation : string
            Value : float
        }

module Lets =
    let meter = { Name = "meter"; Abbreviation = "m"; Value = 1.0 }
    let millimeter = { Name = "millimeter"; Abbreviation = "mm"; Value = 1e-3 }

如何使用此簽名創建函數?

let units () : Units[] = ...

F#模塊在編譯時只是靜態類。

使用反射,您應該可以通過以下方式獲取這些值:

module Lets =
    type Dummy = | Dummy
    let meter = { Name = "meter"; Abbreviation = "m"; Value = 1.0 }
    let millimeter = { Name = "millimeter"; Abbreviation = "mm"; Value = 1e-3 }


let t = typeof<Lets.Dummy>.DeclaringType
t.GetProperties() |> Array.map(fun p -> p.GetValue(null, null) :?> Unit)

獲取模塊的類型很棘手,但是這種技巧將為您做到這一點。

編輯:

更新以直接投射到Unit 所示的轉換是不安全的,如果GetValue不返回Unit類型,則將拋出該轉換。

另外, unit是F#中的一種類型,使用其他名稱可能會更清楚。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM