2009-10-11 1 views
1

Реализация ScrumJet on GitHub (на момент написания настоящего документа) разделяет по существу идентичные функции между модулями хранения для задач, категорий и плат. Это было достигнуто путем перемещения идентичного кода, который сильно использует макрос ?MODULE в scrumjet_datastore.hrl. Каждый из scrumjet_task.erl, scrumjet_category.erl и scrumjet_board.erl включает scrumjet_datastore.hrl и не имеет функций, определенных локально.Как вы отлаживаете функции из включений в Erlang?

Это очень хорошо работает, когда нет ничего плохого. Однако, если мне нужно отлаживать, тогда отладчик выводит пустой модуль вместо файла заголовка, где определены функции.

Кто-нибудь знает, как заставить работать отладчик Erlang для функций в составе?

+1

Самое простое, что вы просто скопируете код из файла заголовка в исходники модуля и перекомпилируете. – Zed

+2

На мой взгляд, scrumjet_datastore должен быть модулем erlang, каждая функция принимает имя таблицы в качестве дополнительного аргумента. Вместо того, чтобы звонить в эти «пустые» модули, вызовы могут быть сделаны в scrumjet_datastore с переданным также именем таблицы ... – Zed

+2

Я согласен с Zed, если вы не знаете какой-то конкретной причины для необходимости и .hrl-файла и макросов, идите с нормальные модули и параметры, насколько это возможно. Это упрощает многое. Пока не беспокойтесь о производительности или инкрустации. –

ответ

0

Использование включает в Erlang для обмена реализациями функций, как правило, не является хорошей идеей. Он имеет некоторые виды использования, но его следует избегать в стандартном коде приложения.

Как я уже упоминал в 2009 году, я следил за советами Зеда и Адама Линдберга и вместо этого использовал модуль хранилища данных с параметризованными методами.

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

  • Нет связанных вопросов^_^