Разрешает ли F # определение класса в разных файлах?

#f#

#f#

Вопрос:

Я попытался переместить свое определение типа в другой файл .fs, я объявил одно и то же пространство имен в обоих файлах, но мой код, который использует тип, не распознает тип. Разрешает ли это F #?

Комментарии:

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

2. Вы имеете в виду, что файл определения класса должен называться в алфавитном порядке, чтобы он отображался перед файлом, который его использует?

3. Это не в алфавитном порядке, если вы используете VS, вы можете перемещать файлы вверх и вниз по списку с помощью Alt-Up / Down.

Ответ №1:

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

Итак, если у вас есть 2 файла:

File1.fs

 namespace Type.Test    
type Person = { Name : string; Age : int }
 

File2.fs

 namespace Type.Test
module ConsumeType = 
    let richDude : Person = { Name = "Bill"; Age = 58 }
 

затем, когда компилятор вызывается из командной строки, сначала необходимо передать файл1.fs, а затем File2.fs:

 c:> fsc.exe -a File1.fs File2.fs
 

Если вы используете Visual Studio (или какую-либо другую среду IDE) для компиляции, вам нужно поместить File1.fs «выше» File2.fs:

порядок файлов

Как упоминалось @Lee в комментариях, вы можете изменить порядок файлов в VS, щелкнув по ним и используя Alt-Up / Alt-Down .