3

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

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

这个类实际上有很多成员,因为我想存储电子邮件可能包含的每条信息。如果我尝试通过将构造函数拆分为多行来自己格式化构造函数,会发生什么情况,我会收到警告。人们如何在 f# 中让如此庞大的构造函数看起来不错?有一个更好的方法吗?

在类似的说明中,我没有发现 Visual Studio 对 f# 很有帮助,其他人用什么来编码?例如,我认为emacs有一种模式......

4

2 回答 2

3

如果所有“换行符”参数都从同一列开始,则不应出现任何警告。例如:

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

(我个人喜欢使用 Visual Studio for F#。我怀疑是否有支持更完整的 IDE。)

于 2012-10-25T20:59:13.113 回答
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")

这是使用member valF# 3.0 的新功能。在 F# 2.0 中编写相同的代码会很烦人,因为您必须手动定义 getter 和 setter。

于 2012-10-25T21:03:31.147 回答