繁体   English   中英

F#歧视工会访问值

[英]F# Discriminated Unions access values

我有一个作为服务器运行的应用程序,进行了一些计算并返回了一个值。 我创建了MessageType的区分联合类型,因此可以在应用程序之间传递不同类型的消息。

MessageType是由一个的ExchangeMessage类型的ExchangeFrame 我的问题是如何从MessageType访问ExchangeFrame的值。

该代码可能会更好地解释它

[<CLIMutable>]
type ExchangeFrame = 
    { 
    FrameType: FrameType
    Amount: double;
    ConvertTo: Currency
    ConvertFrom: Currency 
    }

type MessageType = ExchangeMessage of ExchangeFrame

let server () = 
    use context = new Context()

    // socket to talk to clients
    use responder = context |> Context.rep
    "tcp://*:5555" |> Socket.bind responder

    Console.WriteLine("Server Running")

    while true do
        // wait for next request from client
        let messageReceived = responder |> Socket.recv |> decode |> deserializeJson<MessageType> 

        //Do Calculations
        let total = doCalculations //MessageReceived.ExchangeMessage.Amount 3.0 

        // send reply back to client
        let message = encode <| total
        message |> Socket.send responder

server ()

就设计而言,您可以通过以下方式访问交换框架:(1)模式匹配以从MessageType中提取框架,然后(2)点入框架以提取字段,如下所示:

let msgType = // creation
let (ExchangeMessage frame) = msgType
let amount = frame.Amount

但是请看我对这个问题的评论。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM