2014-02-04 2 views
3

фона

Я привык сильно типизированным, составленный языки, так что я привык к опечаткам будучи в значительной степени мгновенно взял в качестве необъявленных переменных.Можно ли установить MATLAB для проверки достижимости функции перед запуском

Однако поскольку Matlab является слабо типизированным языком, это не происходит автоматически, и мой цикл развития имеет тенденцию быть:

write function(s) 
| 
˅ 
Run <------------------------- 
|        | 
˅        | 
Crash due to misspelling/typo | 
|        | 
˅        | 
Correct typo -----------------| 

Процесс запуска может работать в течение нескольких минут, прежде чем попасть к опечатке, замедляющей мой цикл разработки значительно.
Я использую MatLab версии 2007b

Вопрос

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

Я знаю, что можно получить список зависимостей, используя depfun, однако я не смог найти способ проверить эти функции.

Например, следующая функция всегда будет терпеть неудачу, но не производит никаких предупреждений, пока она не будет работать

function [biggest]=getBiggest(variableName1, variableName2) 
    if variablename1>variableName2, %<---misspelling! 
     biggest=variableName1; 
    else 
     biggest=variableName2; 
    end 
end 
+0

Обратите внимание, что мой ответ основан на более новых версиях matlab, хотя я считаю, что этот вариант уже был доступен в 2007b. В противном случае рассмотрим обновление, 2007 год уже давно. –

+0

@DennisJaheruddin Если бы это было мое решение –

ответ

3

Я подозреваю, что вы используете другой редактор или вы изменили настройки предупреждения.

При переходе к home > preferences > code analyzer убедитесь, что вы есть один включен, который содержит что-то вроде:

не может определить, является ли ... это переменная или функция

+0

Это приводит к появлению предупреждения в текстовом редакторе (хотя для меня это были варианты mlint) и это именно то, что я хотел –

+1

Хотя странно это предупреждение теперь запускается для всех функций, даже тех, которые находятся в одном файле m –

+0

@RichardTingle Убедитесь, что вы не используете их через 'eval' или так. Если вы считаете, что код в порядке, я бы рекомендуем создать минимальный пример и задать отдельный вопрос. –

0

The Code Analyzer должны поймать большинство вещей, как это.

+0

Инструкции для этого приведут отчет о проверке кода mlint, но нет анализатора кода. Возможно, это просто не доступно для моей версии matlab –

1

MATLAB Linter обычно подбирает переменные, которые используются перед назначением (например, потому что это опечатка), но это не идеально. Он включен по умолчанию (в R2011b, по крайней мере) в графическом интерфейсе, но может также выполняться за пределами MATLAB: http://www.mathworks.com/help/matlab/ref/mlint.html

+0

Хмм, mlint, похоже, забирает переменные, которые никогда не используются (как правило, они также содержат предупреждения в текстовом редакторе), но 'mlint ('getBiggest.m')' не object to the mispelled 'variablename1' –

+0

По умолчанию вы правы, я просто понял, что для него включено два дополнительных сообщения: « Code Analyzer не может определить, является ли переменной или функцией и предполагает, что это функция.»и« Переменная используется, но может быть отменена (внутри скрипта) ». Это должно подобрать немного больше. – clokep

0

Лично я хотел бы создать какой-то блок тесты. Я использую xUnit, но для этого есть целый вопрос: Unit-testing framework for MATLAB.

Уверен, что он уловит ошибки синтаксиса. Кроме того, это помогает проверить алгоритм.

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