Недавно я пытался изучить объектно-ориентированные аспекты 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). Они кажутся более универсальными (например, могут применяться к модулям / типам в пространствах имен), тогда как у меня нет ситуации, когда файлы сигнатур предлагают что-то, чего нет у модификаторов доступа.