我正在创建一个程序,它接收一封电子邮件并将其转换为json。为了学习函数式语言,我认为这是学习F#的好机会。首先,我想要一个可以轻松序列化为json的消息类。这个类将有一些可以为null的成员。由于这些可选参数,我使用以下格式
type Email(from:string, recipient:string, ?cc:string .........) =
member x.From = from
member x.Recipient = recipient.....
这个类实际上有很多成员,因为我想存储电子邮件可能拥有的每条信息。如果我尝试通过将构造函数分成多行来设置构造函数,我会收到警告。人们如何在f#中使这样一个巨大的构造函数看起来很好?有更好的方法吗?
在类似的说明中,我发现视觉工作室对f#没什么帮助,其他人用来代码的是什么?我认为有一种emacs模式,例如......
答案 0 :(得分:3)
如果所有“newlined”参数都在同一列开始,则不应该有任何警告。例如:
type Email(from:string, recipient:string,
?cc:string) =
member x.From = from
member x.Recipient = recipient
(我个人喜欢使用Visual Studio for F#。我怀疑IDE有更完整的支持。)
答案 1 :(得分:1)
作为创建将所有属性作为参数的构造函数的替代方法,您还可以创建具有可变属性的对象,然后仅指定要在构造中设置的对象:
type Email(from:string, recipient:string) =
member val From = from with get, set
member val Recipient = recipient with get, set
member val Cc = "" with get, set
member val Bcc = "" with get, set
let eml = Email("me@me.com", "you@you.com", Cc="she@she.net")
这是使用F#3.0的新member val
功能。在F#2.0中编写相同内容会非常烦人,因为你必须手动定义getter和setter。