В чем разница между пространством имен и модулем в F#?
Я только начал изучать F# (с небольшим опытом работы с .NET), поэтому простите меня за то, что, вероятно, очень простой вопрос: в чем разница между пространством имен и модулем в F#?
спасибо
Дэйв
Edit: Спасибо за ответ Брайан. Вот что я хотел узнать. Просто уточнение: можете ли вы также открыть пространство имен (аналогично оператору c# using)?
1 ответ:
пространство имен-это .Net-вещь, распространенная во многих языках промышленного уровня, просто способ организовать фреймворки и избежать конфликтов имен между различными библиотеками. И вы, и я можем определить тип "Foo" и использовать их в проекте, если они находятся в разных пространствах имен (например, NS1.Фу и НС2.Foo.) Пространства имен в .Net содержат типы.
модуль-это вещь F#, она примерно аналогична "статическому классу"... это сущность, которая может содержать допустимые значения и функции, а также типы (обратите внимание, что пространства имен не могут непосредственно содержать значения/функции, пространства имен могут содержать только типы, которые сами могут содержать значения и функции). На вещи внутри модуля можно ссылаться через " ModuleName.Thing", который является тем же синтаксисом, что и для пространств имен, но модули в F# также могут быть "открыты", чтобы обеспечить неограниченный доступ, например
open ModuleName ... Thing // rather than ModuleName.Thing
(EDIT: пространства имен также могут быть открыты, но тот факт, что модули могут содержать значения и функции делают открытие модуля более "интересным", поскольку вы можете получить значения и функции, например" cos", которые вы можете использовать напрямую, тогда как на других языках .Net вам обычно всегда нужно квалифицировать его, например " Math.салат ромэн.)"
Если вы вводите код на "верхнем уровне" в F#, этот код неявно входит в модуль.
надеюсь, что это поможет несколько, это довольно открытый вопрос. :)