В этой теме объясняется, как MATLAB® определяет, какую функцию вызывать, когда несколько функций в текущих возможностях имеют одно и то же имя. Текущие возможности включают текущий файл, необязательную подпапку private относительно текущей функции, текущую папку и путь MATLAB.
MATLAB использует следующий порядок приоритета:
Переменные
Прежде чем предположить, что имя совпадает с функцией, MATLAB проверяет наличие переменной с этим именем в текущей рабочей области.
Примечание
Если вы создаете переменную с таким же именем, что и функция, MATLAB не может запустить эту функцию, пока вы не очистите переменную из памяти.
Функция или класс, имя которого совпадает с явно импортированным именем
import
функция позволяет вызывать функции с составными именами (имена состоят из нескольких частей, соединенных точками), используя только конечную часть составного имени. Когда имя функции совпадает с явной (не подстановочной) импортированной функцией, MATLAB использует импортированное составное имя и дает ему приоритет над всеми остальными функциями с таким же именем.
Вложенные функции в текущей функции
Локальные функции в текущем файле
Функция или класс, имя которого совпадает с импортированным именем на основе подстановочных знаков
Когда имя функции совпадает с импортированной функцией на основе подстановочных знаков, MATLAB использует импортированное имя соединения и дает ему приоритет над всеми другими функциями с таким же именем, кроме вложенных и локальных функций.
Частные функции
Private функции являются функциями в подпапке с именем private
это находится непосредственно под папкой текущего текущего файла.
Функции объекта
Функция object принимает конкретный класс объекта в своем списке входных параметров. Когда существует несколько функций объекта с одинаковым именем, MATLAB проверяет классы входных параметров, чтобы определить, какую функцию использовать.
Конструкторы классов в папках @
MATLAB использует конструкторы классов для создания различных объектов (таких как timeseries
или audioplayer
), и можно задать свои собственные классы, используя объектно-ориентированное программирование. Для примера, если вы создаете папку класса @polynom
и функцию конструктора @polynom/polynom.m
конструктор имеет приоритет над другими функциями с именем polynom.m
в любом месте на пути.
Загруженный Simulink® модели
Функции в текущей папке
Функции в другом месте пути, в порядке внешнего вида
При определении приоритета функций в одной папке MATLAB рассматривает тип файла, в таком порядке:
Встроенная функция
MEX-функция
Simulink файлы модели, которые не загружены, с типами файлов в таком порядке:
SLX- файла
MDL- файл
Stateflow® график со .sfx
расширение
Файл приложения (.mlapp
), созданный с использованием MATLAB App Designer
Программный файл с .mlx
расширение
P-файл (то есть закодированный программный файл с .p
расширение)
Программный файл с .m
расширение
Например, если MATLAB находит .m
файл и P-файл с таким же именем в той же папке, он использует P-файл. Поскольку P-файлы не регенерируются автоматически, убедитесь, что вы регенерируете P-файл каждый раз, когда вы редактируете программный файл.
Чтобы определить функцию, MATLAB вызывает конкретный вход, включите имя функции и вход в вызов which
функция.
Начиная с R2019b, MATLAB изменяет правила разрешения имен, влияя на порядок приоритета переменных, вложенных функций, локальных функций и внешних функций. Для получения информации об изменениях и советах по обновлению кода смотрите Код обновления для R2019b изменений в порядок приоритета функций.
Идентификаторы не могут использоваться в двух целях внутри функции
Идентификаторы без явных объявлений могут не рассматриваться как переменные
Переменные не могут неявно использоваться между родительскими и вложенными функциями
Изменение приоритета комплексного разрешения имен
Анонимные функции могут включать разрешенные и неразрешенные идентификаторы
Поведение import
функция изменилась.
Изменение приоритета импорта на основе подстановочных знаков
Полные функции импорта не могут иметь то же имя что и вложенные функции
Полный импорт теневых определений внешних возможностей с таким же именем
Обработка ошибок, когда импорт не найден
Вложенные функции наследуют операторы импорта от родительских функций