【问题标题】:Getting started with Mathematica packagesMathematica 包入门
【发布时间】:2009-11-13 01:10:48
【问题描述】:

有人可以就如何开始使用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 保持不变。

编辑

我相信我现在有一个部分解决方案可以工作,我文件中的单元格没有被标记为初始化单元格 - 虽然我现在可以 &lt;&lt;Foo', Needs["Foo"]` 仍然无法正常工作正确。

【问题讨论】:

    标签: wolfram-mathematica mathematical-packages


    【解决方案1】:

    检查以确保保存的文件“Foo.m”在您的 $Path 上,它告诉 Mathematica 在尝试加载包时要查看哪些目录,很像 Unix 或 Windows 中的 PATH 环境变量.

    编辑: $ContextPath 不会被更改,除非有一个实际的 BeginPackage 语句(或者你直接使用 SetBlock 或其他东西对其进行操作)。

    编辑第二个:要检查的一件事是什么

    FileNames["Foo.m", $Path]
    

    返回。不过,您所描述的确实有点奇怪。

    【讨论】:

    • Pilly,如果文件在当前工作目录中(我相信它是由 SetDirectory 设置的)和“。”是否足以简单地假设。在 $Path 中,应该找到该文件吗?
    【解决方案2】:

    任何一种形式都应该有效。当使用Get(或&lt;&lt;)或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/ApplicationsNeeds 可以把它们捡起来。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多