f#类构造函数格式

时间:2012-10-25 20:53:10

标签: json visual-studio constructor f#

我正在创建一个程序,它接收一封电子邮件并将其转换为json。为了学习函数式语言,我认为这是学习F#的好机会。首先,我想要一个可以轻松序列化为json的消息类。这个类将有一些可以为null的成员。由于这些可选参数,我使用以下格式

type Email(from:string, recipient:string, ?cc:string .........) =
    member x.From = from
    member x.Recipient = recipient.....

这个类实际上有很多成员,因为我想存储电子邮件可能拥有的每条信息。如果我尝试通过将构造函数分成多行来设置构造函数,我会收到警告。人们如何在f#中使这样一个巨大的构造函数看起来很好?有更好的方法吗?

在类似的说明中,我发现视觉工作室对f#没什么帮助,其他人用来代码的是什么?我认为有一种emacs模式,例如......

2 个答案:

答案 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。