2013-09-04 4 views
3

Это проблема:MATLAB не показывает помощь для созданного пользователя класса частных методов и свойств

  1. Создать класс и установить доступ быть частными для некоторых свойств или методов.
  2. Используйте команду doc для созданного класса. Это позволит автоматически генерировать документацию из ваших комментариев и показывать ее во встроенном браузере справки.

    doc classname

Проблема заключается в том, что документация для частных свойств и методов не отображается в справке браузера. Есть ли способ преодолеть эту проблему?

+2

Каков ваш прецедент? В общем, частные методы используются только самим классом и не могут быть доступны извне. Другими словами: пользователи не могут его видеть, не могут использовать, поэтому нет необходимости знать о самом существовании метода (не говоря уже о том, как его использовать). Это один из принципов инкапсуляции. Любая документация предназначена только для глаз разработчика, и поэтому ее можно оставить в коде. –

+0

Да, документация предназначена для использования другими разработчиками. Из того, что я вижу, это лучший способ включить документацию для исходного кода. Я не вижу причины, по которой документация скрывала бы частные методы и свойства, поскольку исходные файлы MATLAB могут быть замечены кем угодно. Это документация, а не код. Я не понимаю, почему MATLAB следит за правилами парадигмы ООП в документации. – Vladimir

+0

Если вы распространяете код MATLAB конечным пользователям, вам обычно требуется, чтобы они видели только документацию по функциональным возможностям, к которой они могут напрямую обращаться, и не следует путать детали реализации, такие как частные методы. Если разработчики хотят видеть больше деталей, они могут посмотреть на сам код. Исходные файлы MATLAB никоим образом не могут быть замечены - вы можете «pcode» их. –

ответ

3

Так что я потратил 10 минут, используя отладчик, перепрыгнув с одной функции на другую, отслеживая путь выполнения простого вызова doc MyClass.

В конечном счете это привело меня к следующему файлу:

fullfile(toolboxdir('matlab'),'helptools','+helpUtils','isAccessible.m') 

Эта функция вызывается в процессе генерации документации для класса, чтобы определить, если элементы класса (включая методы, свойства и события) публично доступный и не скрытый. Эта информация используется позже, чтобы «отбросить» элементы.

Так что, если вы готовы изменить внутренние функции MatLab, и вы хотите, чтобы документы всегда показывают все методы и свойства, независимо от их объема, просто переписать функцию, чтобы сказать:

function b = isAccessible(classElement, elementKeyword) 
    b = true; 
    return 

    % ... some more code we'll never reach! 
end 

Конечно, дон «забудьте сделать резервную копию файла в случае, если вы передумали позже :)

(на недавнем Windows, вам нужно выполнить этот шаг с правами администратора)


В качестве теста возьмите класс образца, определенный в this page, и запустите doc someClass.Результат:

doc someClass

+0

+1 приятная работа @Amro! –

+0

Я думаю, что в R2015a файл isAccessible больше не существует. – Hovestar

+1

Я сделал некоторую охоту, и ради Googlers вот где находится файл: 'fullfile (toolboxdir ('matlab'), 'general', '+ matlab', '+ internal', '+ language', ' + introspective ',' isAccessible.m ') ' – Hovestar

3

Это поведение по дизайну - автоматически созданная документация предназначена для пользователей этого класса, которые могли бы получить доступ к общедоступным свойствам и методам.

Я не знаю, как это изменить.

Вы можете попробовать:

  1. Используйте альтернативную систему автоматической генерации документации, такой как this из MATLAB Central File обменника (который я считаю, будет документировать все свойства, а не только общественности).
  2. Внесите свою команду doc. Ваша команда doc должна принимать те же самые входы, что и встроенная команда doc, определить, соответствуют ли ее входы вашему классу/методам/свойствам и т. Д., И если они отображают их документацию, в противном случае передайте свои входы прямо к встроенному doc , Убедитесь, что ваша команда впереди встроенного в путь.
+1

Я сделал тяжелую работу, и я выделил функцию, отвечающую за проверку того, являются ли методы/свойства общедоступными или нет. См. Мой ответ – Amro