Псевдоним пространства имен в F #? - PullRequest
20 голосов
/ 21 февраля 2012

У меня проблема с конфликтом имен при открытии некоторых сборок .Net в моем коде F # с использованием

open System.IO

Единственный вариант, который я нашел и использую сейчас, - это предоставление полных имен типов для конфликтующих типов, ноэто немного скучно.

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

1 Ответ

36 голосов
/ 21 февраля 2012

F # не поддерживает псевдоним пространств имен - только модули и типы.Таким образом, чтобы разрешить конфликты между сборками .NET, вам, к сожалению, потребуется определить псевдонимы для всех типов, которые вы используете.

Это может быть немного проще благодаря тому, что псевдонимы типа F # просматриваютсякак обычные объявления типов (компилятором F #, а не средой выполнения).Это означает, что, в отличие от ключевого слова C # using, вы можете определить их в отдельном файле:

// Aliases.fs
namespace SysIO

// Open the 'System' namespace to get a bit shorter syntax
// ('type File = File' is interpreted as discriminated union)
open System

type File = IO.File
type Directory = IO.Directory

В остальной части вашего приложения теперь вы можете использовать SysIO.File.Вам все еще нужно написать псевдонимы, но, по крайней мере, вам не нужно делать это в каждом файле ...

...