[英]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.