web-dev-qa-db-ja.com

F#同じプロジェクト内の別のファイルでタイプ/モジュールを定義/使用する

これはうまくいけば簡単なものになるでしょう。 2つのファイル(Program.fs、Stack.fs)を含むF#プロジェクト(最新のF#CTP)があります。 Stack.fsには単純な名前空間と型定義があります

Stack.fs

namespace Col

type Stack= 
 ...

次のように宣言して、Program.fsに名前空間を含めようとします

open Col

これは機能せず、「名前空間またはモジュールColが定義されていません」というエラーが表示されます。しかし、それは同じプロジェクト内で定義されています。私は明白な何かを見逃している必要があります

69
JaredPar

プロジェクト内のファイルの順序は? Program.fsがそれを「見る」ことができるようにするには、Stack.fsがProgram.fsの前に来る必要があります。

の始まりも参照

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

そしての終わり

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

78
Brian

私も同じ問題を抱えていました。そうです、ファイルの順序はコンパイラーによって考慮されます。削除と追加のパターンの代わりに、.fsファイルに関連付けられたコンテキストメニューの[上に移動]/[下に移動]項目を使用できます。 (Alt-UpとAlt-Downは、ほとんどの標準キー割り当てのショートカットキーです)

41

上記はすべて正しいですが、VS2013でこれを行う方法は別の質問です。 Notepad ++で。fsprojファイルを編集して、ItemGroupノードの順序を設定する必要がありました。この場合、次のようになります。

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

私は同じ問題を抱えていて、それは確かにファイルの順序でした。ただし、上記のリンクには、Visual Studio 2008 F#1.9.4.19で修正する方法が記載されていませんでした。

モジュールを開く場合は、ソースファイルがソリューションエクスプローラーの依存関係afterに依存していることを確認してください。ソースを右クリックして[削除]を選択します。次に、再度追加します。これにより、リストの一番下に表示されます。うまくいけば、循環依存関係はありません。

1
Jen S.

Visual Studio for Mac-8.1.4を使用していますが、一部の.fsファイルが「コンパイル」としてマークされていません。ビルド出力を表示してこれを確認し、すべてのファイルがそこにあり、正しい順序であるかどうかを確認できます。

特定のファイルが「コンパイル」とマークされていることを手動で確認する必要があり、「テイク」するまで手動でファイルを上下に移動する必要がありました。

0
Doug