12

NecessaryModule1 と NecessaryModule2 という 2 つのモジュールがあるとします ( Haskell : loading ALL files in current directory pathの記事で説明されているように)。次に、WinGHCi と GHCi の両方で次のことを確認しました。

> :load NecessaryModule1
[1 of 1] Compiling NecessaryModule1 ( NecessaryModule1.hs, interpreted )
Ok, modules loaded: NecessaryModule1.
> addNumber1 2 3
5
> :load NecessaryModule2
[1 of 1] Compiling NecessaryModule2 ( NecessaryModule2.hs, interpreted )
Ok, modules loaded: NecessaryModule2.
> addNumber1 2 3

<interactive>:1:1: Not in scope: `addNumber1'

つまり、NecessaryModule2 をロードすると、NecessaryModule1 からすべての関数が削除されます。

つまり、NecessaryModule1 と NecessaryModule2 を同時にロードできる唯一の方法は、3 番目のファイル (NecessaryModule1 と NecessaryModule2 の両方をインポートする) を使用してから、その 3 番目のファイルをロードすることでしょうか? (たとえば、Haskell の test.hs を参照してください: 現在のディレクトリ パスにすべてのファイルをロードしています) ありがとうございます。

-------------------------------------------------- --------------------------------------

[ギーコサウルスへの対応]

こんにちは、私が行っ:load NecessaryModule1た場合、モジュールを MyMod.hs にロードします。

--MyMod.hs
module MyMod where
import Data.List

f x = sort x

では、どうすればこれを行うことができますか?In Haskell : unload module in WinGHCi Riccardo は:module、モジュールが既にロードされていることを前提として説明しています。これは、複数のカスタム モジュールのロードを実現する唯一の方法は、:load関数の 1 回の呼び出しでそれらをロードすることであるということですか? ありがとう。

4

2 に答える 2

19

わかりました、考慮すべきことが 2 つあります: ":module" が検出することを知っているものと、特定のプロンプトで実際にコンテキスト内にあるものです。

:module は、インストールされたパッケージ (非表示ではない) 内のモジュールを見つける方法を常に知っており、デフォルトではそれがアクセスできるすべてです。ただし、:load を使用して、特定のファイル内の他のモジュールを認識させることができます。:load を呼び出すたびに、追加モジュールのセットがリセットされます (および :reload は、ロードされたモジュールの同じセットを保持しますが、それらのコンテンツを更新します)。また、:load は、指定した最初のモジュールのコンテキストに入ります。

言い換えれば、両方のモジュールがインポートされているコンテキストに入りたい場合は、次のことを行う必要があります。

> :load Module1 Module2
> :module Module1 Module2

これは、複数のカスタム モジュールのロードを実現する唯一の方法は、:load 関数の 1 回の呼び出しでそれらをロードすることであるということですか?

言い換えれば:はい!(ただし、新しいコンテキストでそれらを使用したい場合は、過去にロードしたモジュールを繰り返す必要があることを除いて、それは問題ではないようです)

于 2012-04-25T10:16:20.643 に答える
17

:loadメイン プログラム モジュールをロードします。 :module追加のモジュールをロードするために使用できます。

> :load BaseModule -- this is the one that contains 'main'
> :module +AddedModule -- this is an additional library module

:moduleこれらの追加モジュールをアンロードするために使用することもできます:

> :module -AddedModule -- after this @AddedModule@ will no longer be loaded

を含むモジュールがない場合は、mainを使用:module +してすべてのライブラリ モジュールをロードすることをお勧めします。

于 2012-04-25T06:22:49.017 に答える