4

fsx ファイルをロード + リロードするための推奨される方法は何ですか? ただ実験中...はいはい正しい言語正しい仕事など..

FSI で次のことができる方法が気に入っています。

#load "script.fsx";
open Script

> let p = script.x 1 
  Error: This expression was expected to have type string but here has int...
(* edit script.fsx x to make it int -> int  *)
>
> #load "script.fsx"
> let p = script.x 1
val it : int = 2

しかし、fsi blah.fsx を介して実行しているアプリケーションに対してこれを行うにはどうすればよいでしょうか。多分whileループに座っている何か。#load と #use を let または module 内に置いてはいけないようです。つまり、let reload script = #load script のように #load を使用することはできません。

私の元の方法は、何かを追加/修正するたびに .fs ファイルを作成し、再コンパイル + 再起動することでした。この方法は原始的な感じがします。

2番目の方法は、モジュール内で #load ディレクティブを使用しようとすることでしたが、機能しないことが判明しました(スコープの観点からは理にかなっています)...

module test1 =
  #load @"C:\users\pc\Desktop\test.fsx"

  open Test

module test2 = 
  ...

もう 1 つの方法は、fsi module.fsx にプロセス診断をロードして、すべてのモジュールに新しいプロセスを作成することですが、これは恐ろしく、非効率的で、ひどいものに思えます。

これは .NET 内では些細なことではないだろうと心の奥底で感じていますが、とにかく質問をしたいと思います。彼らのコードをコピーするには)?

TL;DR erlang について次の記事を読み、F# で自分用に使いたいと思います。 Erlang: rebar を使用して、変更されたモジュールを既に実行中のノードに再ロードする方法はありますか?

「...プログラム内のモジュールがディスク上で変更されるたびに、リローダーは実行中のコピーを自動的に置き換えます。」

4

2 に答える 2