3

Mathematica パッケージを使い始める方法について誰かアドバイスをいただけますか?

以下を「Foo.m」という名前のファイルに保存できます。そのファイルで入力セルを実行すると、$ContextPath 変数に反映された効果を確認できます。

BeginPackage["Foo`"]

bar::usage = "barfunction";

Begin["`private`"]
bar[w_] := w;
End[];

EndPackage[];

ただし、私のノートには次のようなものがあります。

#include<foo>
SetDirectory[ToFileName[{$HomeDirectory, "My Documents", "mathematica"}]];
Needs["Foo`"]
$ContextPath

しかし、何らかの理由でニーズの呼び出しが失敗しており、$ContextPath は変更されていません。

編集

ファイル内のセルは初期化セルとしてマークされていませんでしたが、今はできますが<<Foo'Needs["Foo「]`はまだ正しく機能していません。

4

2 に答える 2

2

保存されたファイル「Foo.m」が にあることを確認してください.これは, Unix や Windows の環境変数$Pathのように, パッケージをロードしようとするときにどのディレクトリを参照するかを Mathematica に伝えます.PATH

EDIT: 実際のステートメント$ContextPathがない限り(またはまたは何かを使用して直接操作しない限り)変更されません。BeginPackageSetBlock

2番目の編集:確認することの1つは、

FileNames["Foo.m", $Path]

戻り値。ただし、あなたが説明していることは少し奇妙に聞こえます。

于 2009-11-13T01:15:22.517 に答える
1

どちらの形式でも機能するはずです。Get(または<<) またはを使用してファイルをロードすると、最初Needsに の上部のディレクトリDirectoryStack[]が検索され、次に$Pathが検索されます。(SetDirectoryは変わらない$PathのでFileNames["Foo.m", $Path]は見つかりませんFoo.m。) ただし、FindFileデフォルトでは と が検索されDirectory[]ます$Path。次のようにしてテストできます。

FindFile["Foo`"]
SetDirectory[<Foo dir>]
FindFile["Foo`"]

それは戻るべきです

$Failed
<Foo dir>
<Foo dir>/foo.m

FindFile見つけることができれば、Foo.mそれNeedsを見つけることができるはずです。一般的に、私は自分のパッケージを に入れ、$UserBaseDirectory/Applications問題Needsなく受け取ります。

于 2009-11-13T04:34:41.310 に答える