F # визначення / використання типу / модуля в іншому файлі того самого проекту


79

Сподіваємось, це буде легко. У мене є проект F # (останній F # CTP) з двома файлами (Program.fs, Stack.fs). У Stack.fs у мене є простий простір імен та визначення типу

Stack.fs

namespace Col

type Stack= 
 ...

Тепер я намагаюся включити простір імен у Program.fs, оголосивши

open Col

Це не працює, і з’являється помилка «Простір імен або модуль Col не визначено». Проте це визначено в рамках одного проекту. Я повинен пропустити щось очевидне


3
Як підказка: якщо вам потрібно змінити порядок файлів у Visual Studio, встановіть F # PowerTools і використовуйте Alt+Arrowв провіднику рішень їх переміщення (або клацніть правою кнопкою миші). Ви також можете перемістити їх в інші папки, або створити нові папки тощо
Абель

Відповіді:


85

У якому порядку розташовані файли у проекті? Stack.fs повинен стояти перед Program.fs, щоб Program.fs міг його "побачити".

Див. Також початок

http://lorgonblog.spaces.live.com/blog/cns!701679AD17B6D310!444.entry

і кінець

http://lorgonblog.spaces.live.com/blog/cns!701679AD17B6D310!347.entry


1
Ідеально! додаткові символи додані до обмежень коментарів satifsy.
JaredPar,

1
Цей мене теж зачепив, я міг би подумати, що компілятор F # міг просто швидко перевірити всі інші файли та шукати відсутні модулі ... здається досить простим
Ед Айерс

"Який порядок файлів у проекті?" що це означає? Всі файли знаходяться в одній папці.
runeks

Важливий порядок, у якому файли перелічені у файлі .fsproj. Провідник рішень Visual Studio повинен перераховувати їх у тому ж порядку та надавати команди контекстного меню для їх переміщення вгору чи вниз.
Скотт Хатчінсон,

42

У мене були ті самі проблеми, і ви маєте рацію, порядок файлів враховується компілятором. Замість шаблону "Видалити та додати" ви можете використовувати елементи "Перемістити вгору / вниз" у контекстному меню, пов'язаному з файлами .fs. (Alt-Up та Alt-Down - це комбінації клавіш у більшості стандартних прив'язок клавіш)


Я вважаю, що ці прив'язки ключів доступні лише з встановленими F # PowerTools (але більшість користувачів F # все одно встановлюють їх).
Абель

13

Все вищезазначене є правильним, але як це зробити у VS2013 - це вже інше питання. Мені довелося редагувати файл .fsproj вручну та встановлювати файли в точному порядку у вузлі ItemGroup. У цьому випадку це буде виглядати так:

<ItemGroup>
    <Compile Include="Stack.fs" />
    <Compile Include="Program.fs" />
    <None Include="App.config" />
</ItemGroup>

Або ви могли просто встановити F # PowerTools , який дозволяє переміщати файл вгору або вниз, переміщувати їх в каталог або поза ним та багато іншого. Заощадите багато часу.
Абель

2
Просто якби це сталося у VS2015 - переміщення файлів вгору чи вниз не вирішувало проблему - довелося редагувати файл .fsproj вручну. - Можлива помилка у F # PowerTools
jps

1
@jps, так, я також помітив деякі помилки з PowerTools, особливо. при переміщенні каталогів вгору / вниз (вони опиняються внизу у fsproj, але виглядають вище у VS). Переміщення в одному каталозі зазвичай відбувається правильно (для мене). На щастя, тепер ви можете редагувати fsproj безпосередньо у VS2015.
Абель

1

У мене була та сама проблема, і це справді було упорядкування файлів. Однак у посиланнях вище не описано, як це виправити у Visual Studio 2008 F # 1.9.4.19.

Якщо ви відкриваєте модуль, переконайтесь, що ваш вихідний файл надходить після залежності у провіднику рішень. Просто клацніть правою кнопкою миші джерело та виберіть Видалити. Потім додайте його знову. Це з’явиться внизу списку. Сподіваємось, у вас немає кругових залежностей.


1
Я новачок у F #. Що робити, якщо я маю циркулярну залежність? Це взагалі не можливо в Росії?
ПАМ’ЯТКА

1
@MEMark використовуйте ключове слово "і", коли вам справді потрібні такі типи.
Госвін

0

Я використовую Visual Studio для Mac - 8.1.4, і я помітив, що деякі файли .fs не позначені як "Компілювати". Ви можете переконатися в цьому, переглянувши вихідні дані збірки, і перевірити, чи всі ваші файли там і у правильному порядку.

Мені довелося вручну переконатись, що певні файли позначені позначкою "Компілювати", і мені доводилося переміщати їх вгору та вниз вручну, поки це не "займе".

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.