我最近一直在努力学习F#的面向对象方面,并且对如何限制对该语言中的类型/模块的访问感到好奇.
更具体地说,我想知道写这个之间的区别:
Example.fsi
module Stack =
val foo : string
Run Code Online (Sandbox Code Playgroud)
Example.fs
module Stack =
let foo = "foo"
let bar = "bar"
Run Code Online (Sandbox Code Playgroud)
或者这个:
module Stack =
let foo = "foo"
let private bar = "bar"
Run Code Online (Sandbox Code Playgroud)
他们到底完全没有做同样的事情吗?来自C#背景,我更倾向于使用访问修饰符而不是签名(FSI)文件.它们似乎更通用(例如,可以应用于命名空间中的模块/类型),而我不会在任何情况下签名文件提供访问修饰符所不具备的内容.
我正在开发一个项目,它有许多我想应用访问控制约束的模块.我还想让我的项目包含关于每个函数的类型签名的附加文档.
我知道我可以通过F#签名文件轻松完成这两项任务.但是,我的项目很大并且包含许多文件,我需要一种为每个文件生成签名文件的便捷方法.我已成功使用--sig编译器选项通过命令行编译生成单个签名文件,但我仍然坚持如何向Visual Studio的构建例程添加编译器选项.
有没有一种方便的方法,通过VS编译选项,或通过一些命令行脚本,为我创建项目目录中每个*.fs文件的F#签名文件?
谢谢.