Порядок приоритета функций

В этой теме объясняется, как MATLAB® определяет, какую функцию вызывать, когда несколько функций в текущих возможностях имеют одно и то же имя. Текущие возможности включают текущий файл, необязательную подпапку private относительно текущей функции, текущую папку и путь MATLAB.

MATLAB использует следующий порядок приоритета:

  1. Переменные

    Прежде чем предположить, что имя совпадает с функцией, MATLAB проверяет наличие переменной с этим именем в текущей рабочей области.

    Примечание

    Если вы создаете переменную с таким же именем, что и функция, MATLAB не может запустить эту функцию, пока вы не очистите переменную из памяти.

  2. Функция или класс, имя которого совпадает с явно импортированным именем

    import функция позволяет вызывать функции с составными именами (имена состоят из нескольких частей, соединенных точками), используя только конечную часть составного имени. Когда имя функции совпадает с явной (не подстановочной) импортированной функцией, MATLAB использует импортированное составное имя и дает ему приоритет над всеми остальными функциями с таким же именем.

  3. Вложенные функции в текущей функции

  4. Локальные функции в текущем файле

  5. Функция или класс, имя которого совпадает с импортированным именем на основе подстановочных знаков

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

  6. Частные функции

    Private функции являются функциями в подпапке с именем private это находится непосредственно под папкой текущего текущего файла.

  7. Функции объекта

    Функция object принимает конкретный класс объекта в своем списке входных параметров. Когда существует несколько функций объекта с одинаковым именем, MATLAB проверяет классы входных параметров, чтобы определить, какую функцию использовать.

  8. Конструкторы классов в папках @

    MATLAB использует конструкторы классов для создания различных объектов (таких как timeseries или audioplayer), и можно задать свои собственные классы, используя объектно-ориентированное программирование. Для примера, если вы создаете папку класса @polynom и функцию конструктора @polynom/polynom.mконструктор имеет приоритет над другими функциями с именем polynom.m в любом месте на пути.

  9. Загруженный Simulink® модели

  10. Функции в текущей папке

  11. Функции в другом месте пути, в порядке внешнего вида

При определении приоритета функций в одной папке MATLAB рассматривает тип файла, в таком порядке:

  1. Встроенная функция

  2. MEX-функция

  3. Simulink файлы модели, которые не загружены, с типами файлов в таком порядке:

    1. SLX- файла

    2. MDL- файл

  4. Stateflow® график со .sfx расширение

  5. Файл приложения (.mlapp), созданный с использованием MATLAB App Designer

  6. Программный файл с .mlx расширение

  7. P-файл (то есть закодированный программный файл с .p расширение)

  8. Программный файл с .m расширение

Например, если MATLAB находит .m файл и P-файл с таким же именем в той же папке, он использует P-файл. Поскольку P-файлы не регенерируются автоматически, убедитесь, что вы регенерируете P-файл каждый раз, когда вы редактируете программный файл.

Чтобы определить функцию, MATLAB вызывает конкретный вход, включите имя функции и вход в вызов which функция.

Изменение правил для порядок приоритета функций

Начиная с R2019b, MATLAB изменяет правила разрешения имен, влияя на порядок приоритета переменных, вложенных функций, локальных функций и внешних функций. Для получения информации об изменениях и советах по обновлению кода смотрите Код обновления для R2019b изменений в порядок приоритета функций.

  • Идентификаторы не могут использоваться в двух целях внутри функции

  • Идентификаторы без явных объявлений могут не рассматриваться как переменные

  • Переменные не могут неявно использоваться между родительскими и вложенными функциями

  • Изменение приоритета комплексного разрешения имен

  • Анонимные функции могут включать разрешенные и неразрешенные идентификаторы

Поведение import функция изменилась.

  • Изменение приоритета импорта на основе подстановочных знаков

  • Полные функции импорта не могут иметь то же имя что и вложенные функции

  • Полный импорт теневых определений внешних возможностей с таким же именем

  • Обработка ошибок, когда импорт не найден

  • Вложенные функции наследуют операторы импорта от родительских функций

См. также

Похожие темы