最近,我一直在尝试学习F#的面向对象方面,并对如何限制对语言中的类型/模块的访问感到好奇。
更具体地说,我想知道写这篇文章的区别:
Example.fsi
module Stack =
val foo : stringExample.fs
module Stack =
let foo = "foo"
let bar = "bar"另一种选择是:
module Stack =
let foo = "foo"
let private bar = "bar"他们最终不是完成了同样的任务吗?来自C#背景,我非常倾向于使用访问修饰符的签名(FSI)文件。它们似乎更通用(例如,可以应用于命名空间中的模块/类型),而我不认为签名文件提供了访问修饰符所不提供的东西。
发布于 2009-10-06 17:29:55
他们几乎完成了同样的事情。(请注意,您也可以将.fsi文件用于名称空间中的类型,因此不确定您的评论意味着什么。)
签名文件有几个优点:
public,但是可以将private设置为项目的后续文件。第一个问题是不要小看装配内封装,因为这实际上是一个非常大的项目的巨大特性。能够在File1.fs中定义一些彼此公开的类型,但是只有这些类型/方法的子集对其他类型公开(File2.fs、File3.fs等)。非常有用(有点像C++中的“朋友”)。
https://stackoverflow.com/questions/1526902
复制相似问题