2017-07-12 7 views
5

を投写します2つの関数間でコード(特にタイプ)を共有する方法はありますか?共有コードは、私は現在、VSコードuinsg F#Azureの機能を開発していると私のような私のプロジェクトを打ち出してきた

+3

スクリプトの代わりにAzure関数にfsproj(プリコンパイル済み)を使用することをお勧めします。特に、関数間でコードを共有したい場合。あらかじめコンパイルするだけの利点があります。 VS Azure関数プロジェクトは使用できませんが、必要はありません。 – TheQuickBrownFox

答えて

5

F#コンパイラはフォルダをうまくサポートしています。あなたは、Visual Studioがデフォルトの設定で、F#プロジェクトにフォルダを追加することを許可していないという事実を指しているかもしれません - それは本当の事実です。しかし、何らかの形でファイルを手動で編集するか、F# Power Toolsを使ってプロジェクトファイルにフォルダを追加すると、F#コンパイラは問題は発生しません。

しかし、スクリプト(fsx)はコンパイル済みモジュール(fs)と同じではないため、これはあなたのケースには関係ありません。スクリプトは、それらを一緒にバインドするプロジェクトを持っておらず、お互いのコードを使用するためにお互いに#loadする必要があります。そして#loadはどんな経路からでも実行できます。

たとえば、次のようにコードをレイアウトする場合がありますから明らかなように

// Function1/run.fsx 
#load "../Common/Helpers.fsx" 

let x = Helpers.someFunction() 

ProjectFolder 
    -> Common 
     -> Helpers.fsx 
    -> Function1 
     -> function.json 
     -> run.fsx 
    -> Function2 
     -> function.json 
     -> run.fsx 

そして、Function1/run.fsx以内に、相対パスを使用してファイルHelpers.fsxをロード上の例では、この方法で読み込まれたスクリプトは、ホストスクリプト内に、スクリプトファイルの後に名前が付けられたモジュールとして表示されます。

これは機能しますが、時間の経過とともに非常に乱雑になります。代わりにプリコンパイルされたコードを使うことを強くお勧めします。このようにして、共有ライブラリに共通コードを置き、両方の関数から参照することができます。

私は非常にお勧めしますthis recent video from NDC Oslo。これらのことなどについてはよく話します。

+0

名前空間/モジュールなどの非スクリプトファイルも含めて気にする必要がありますか? – Slugart

+1

はい、スクリプト以外のファイルも含めることができます。彼らはちょっと使いにくいですが、うまくいくでしょう。しかし、私はそれをお勧めしません。私が言ったように、私はプリコンパイルをお勧めします。 –

+0

私は私のinstapaperキューでそのビデオを持っていた:) – Slugart

関連する問題