【发布时间】:2010-12-04 08:33:28
【问题描述】:
我最近一直在尝试学习 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) 文件。它们似乎更通用(例如,可以应用于命名空间中的模块/类型),而我在任何情况下都没有签名文件提供访问修饰符不提供的东西。
【问题讨论】:
-
你的例子无论如何都不应该工作 ;-) (let foo _ = "bar")
-
为什么它不能工作?该示例对我来说编译得很好。
-
.fsi 将 foo 声明为一个函数,但随后 .fs 将其定义为一个值。
标签: f# access-modifiers signature-files