签名文件和访问改性剂在F#(Signature Files and Access Modifers

2019-08-17 09:04发布

我最近一直在努力学习F#的面向对象的方面,并已成为好奇如何限制访问类型/模块的语言。

更具体地讲,我想知道写这之间的区别:

Example.fsi

module Stack =
    val foo : string

Example.fs

module Stack =
    let foo = "foo"
    let bar = "bar"

还或者这样:

module Stack =
    let foo = "foo"
    let private bar = "bar"

难道他们不完成准确到底是一回事吗? 从C#背景的,我非常倾向于只是在签名使用访问修饰符(FSI)的文件。 他们似乎更灵活(可应用到模块/类型的命名空间,例如),而我没有在签名文件提供访问修饰符做不是任何情况。

Answer 1:

他们完成几乎同样的事情。 (请注意,您可以使用.fsi文件命名空间中的类型太多,不确定你的有关评论的意思。)

签名文件有几个优势:

  • 你可以让实体public该文件的时间,但随后private到项目的后续文件。
  • 您可以在签名文件只是你的简短总结,所以公共接口易于阅读,而无需扫描吨的代码。

第一颗子弹是不是好惹的 - 内组装这样的封装实际上是一个非常大的项目一个相当巨大的功能。 可以定义一些类型的都是公开内File1.fs彼此,但后来只有那些类型/方法的子集是公共的休息(File2.fs,File3.fs,等等)是非常有用的(有点像在C“朋友” ++)。



文章来源: Signature Files and Access Modifers in F#