2011-01-24 3 views
1

Большинство моих личных пакетов - это всего лишь один файл m, например Foo.m, но они обычно заканчиваются как Foo/Foo.m, поэтому я могу хранить связанные тесты и примечания в каталоге Foo. Чтобы пакеты должны быть загружены только с <<Foo`, я включаю Foo/init.m следующим образом:Mathematica: возможно ли создать автоматический файл init.m для простых пакетов.

With[{packagename="Foo"}, 
    [email protected]@{ 
    [email protected][packagename<>"`"], 
    packagename<>".m"}] 

Это прекрасно работает до тех пор, как я помню, чтобы обновить packagename при копировании init.m новых пакетов, но мне было интересно, если есть способ сделать полностью многоразовый init.m для этого простого случая?

Просто для полноты, я не хочу переименовывать реализацию implementation.m.

+0

Итак, вы хотите что-то может быть самосознанием его загрузки каталога. Это правильно? –

ответ

3

Я не совсем уверен, что понять ваш вопрос, но здесь это предположение так или иначе ...

ли вы попробовать что-то вроде

packagename = StringDrop[DirectoryName[$Input], -1] 

в вашей первой линии?

Edit: для будущей ссылки

После испытания Янус, это стало то, что правильное выражение:

packagename=StringDrop[$Input,-2] 
+0

Пятно на! Я просматривал что-то похожее на «NotebookFilename», но не смог его найти. Благодаря! – Janus

+0

Оказывается, что a) $ Input не задан для полного пути и b) он кажется, что путь, переданный 'Get', т.е.' $ Input == Foo.m' при чтении 'Foo/init.m' , Таким образом, это должно быть 'packagename = StringDrop [$ Input, -2]'. – Janus

+0

@Janus Спасибо! Рад, что это сработало! Я отредактировал свой ответ с правильным выражением. –

Смежные вопросы