Модули v. Пространства имен в F # - PullRequest
9 голосов
/ 20 июля 2009

У меня есть библиотека, написанная на F #, потребляемая C # и F #. эта библиотека определяет класс foo в модуле bar в пространстве имен random:

#light
namespace random

module bar

type foo() = ...

Теперь, когда я использую тип random.foo.bar, C # intellisense видит его как тип bar, вложенный в тип random.foo.

Вопрос заключается в следующем: есть ли преимущество в C # для определения потребляемого извне кода в модули, а не в пространствах имен? Я понимаю, что модули - хороший способ группировать функции, но как насчет классов?

1 Ответ

16 голосов
/ 20 июля 2009

Если вы публикуете компоненты F # для использования из других языков .Net, вам следует избегать модулей в открытых интерфейсах и придерживаться пространств имен, содержащих классы, структуры и перечисления.

(Модули - это удобный способ публикации значений, функций и типов только среди компонентов F # или в виде «внутренних» подробностей реализации компонента F #, публикующего классы .Net.)

(см. Также этот вопрос для обсуждения «технического различия» между пространствами имен и модулями. Этот вопрос и мой ответ выше касаются «преднамеренных различий», например, когда вы решите использовать каждый.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...