Чтобы настроить предложения кода и завершения для ваших функций, предоставьте MATLAB® с информацией о сигнатурах вашей функции. Сигнатуры функции описывают приемлемые синтаксисы и допустимые типы данных для функции. MATLAB использует эту информацию для улучшения интерактивных функций, таких как заполнение клавишей Tab и подсказчика функций. Определите эту информацию о функции в JSON-форматированном файле с именем functionSignatures.json
.
Чтобы MATLAB обнаружил информацию о сигнатуре функции, вы должны разместить functionSignatures.json
в папке, содержащей код функции. Если вы задаете информацию для метода класса или функции пакета, необходимо разместить functionSignatures.json
в родительской папке самого внешнего класса или папки пакета. Например, чтобы задать информацию для метода myClass
, поместите functionSignatures.json
в папке myFolder
для этих классовых и пакетных структур:
myFolder/+myPackage/@myClass myFolder/+myPackage/+mySubpackage/@myClass
Можно задать сигнатуры для нескольких функций в одном файле.
The functionSignatures.json
файл содержит один объект JSON. JSON использует скобки для определения объектов и ссылается на объекты как на наборы пар имен и значений. Поскольку эти термины перегружены в контексте сигнатур функции, вместо «name» используется «свойство». Объект JSON в functionSignatures.json
содержит необязательную версию схемы и список function objects. Каждый объект функции содержит список signature objects, и каждый объект подписи содержит массив argument objects. JSON использует скобки для определения массивов.
Чтобы задать необязательную версию схемы, используйте _schemaVersion
как первое свойство и номер версии как его значение. Укажите номер версии в виде строки JSON в формате
, с каждым числом, заданным как неотрицательное целое число. Текущая версия схемы major#
. minor#
. patch#
1.0.0
. Если файл не задает версию схемы, MATLAB принимает версию 1.0.0
.
Если functionSignatures.json
содержит синтаксические ошибки, MATLAB отображает сообщение об ошибке в Командном окне при чтении файла. Используйте validateFunctionSignaturesJSON
функция для проверки functionSignatures.json
файл по схеме JSON и схеме сигнатуры функции MATLAB.
Чтобы задать информацию для функции, создайте свойство, которое совпадает с именем функции. Его значение является объектом подписи.
{ "functionName1": { signatureObj1 }, "functionName2": { signatureObj2 } }
Чтобы задать информацию для метода класса или функции пакета, используйте полное имя функции или метода. Для примера задайте метод класса myMethod
и функцию пакета myFunction
.
{ "myClass.myMethod": { signatureObj }, "myPackage.myFunction": { signatureObj } }
Можно задать несколько сигнатур функции для одной функции или метода путем определения нескольких объектов функции с одним и тем же свойством (имя функции или метода). Для получения дополнительной информации см. раздел «Несколько сигнатур».
Объект подписи определяет входные и выходные аргументы и поддерживаемые платформы для функции. Значение каждого свойства, кроме platforms
свойство, является массивом объектов аргументов.
{ "functionName1": { "inputs": [ argumentObj1, argumentObj2 ] } }
Если вы задаете такой метод образца, как myClass.myMethod
в файле JSON, один из элементов в inputs
должен быть объектом myClass
. Обычно этот объект является первым элементом. MATLAB поддерживает предложения кода и завершения для заданного метода, когда вы вызываете его с помощью любой записи через точку (b = myObj.myMethod(a)
) или обозначение функции (b = myMethod(myObj,a)
) синтаксис.
Каждая подпись в файле JSON может включать следующие свойства.
Свойство | Описание | Тип значения данных JSON |
---|---|---|
inputs | Список входных аргументов функции. MATLAB использует это свойство для предложений кода и заканчиваний. | Массив объектов аргументов |
outputs | Список выходных аргументов функции. MATLAB использует это свойство для уточнения предложений и дополнений кода. | Массив объектов аргументов |
platforms | Список платформ, поддерживающих функцию. MATLAB не представляет пользовательских предложений и дополнений кода, если платформа не поддерживает функцию. По умолчанию все платформы. Элементы списка должны совпадать с | Строка значений, разделенных запятыми |
Объекты аргумента определяют информацию для каждого из входных и выходных аргументов.
{ "functionName1": { "inputs": [ {"name":"in1", "kind":"required", "type":["numeric"]}, {"name":"in2", "kind":"required", "type":["numeric","integer","scalar"]} ] } }
Порядок появления входов в файле JSON является значительным. Для примера в вызове functionName1
функция, in1
должен появиться перед in2
.
Каждый объект аргумента может включать следующие свойства.
type
- Класс и/или атрибуты аргумента
repeating
- Задайте аргумент несколько раз
Для более сложных сигнатур функции для каждого объекта аргумента доступны следующие свойства.
platforms
- Список поддерживаемых платформ
tuple
- Определение набора аргументов
mutuallyExclusiveGroup
- Определение набора исключительных аргументов
В этом примере описывается, как создать пользовательские предложения кода и дополнения для функции.
Создайте функцию, подпись которой вы опишете в файле JSON в следующих шагах. Следующая функция принимает:
Два необходимых аргумента
Один необязательный позиционный аргумент через varargin
Два необязательных аргументов пары "имя-значение" varargin
myFunc
представлен для демонстрации предложений кода и не включает проверку аргументов.
% myFunc Example function % This function is called with any of these syntaxes: % % myFunc(in1, in2) accepts 2 required arguments. % myFunc(in1, in2, in3) also accepts an optional 3rd argument. % myFunc(___, NAME, VALUE) accepts one or more of the following name-value pair % arguments. This syntax can be used in any of the previous syntaxes. % * 'NAME1' with logical value % * 'NAME2' with 'Default', 'Choice1', or 'Choice2' function myFunc(reqA,reqB,varargin) % Initialize default values NV1 = true; NV2 = 'Default'; posA = []; if nargin > 3 if rem(nargin,2) posA = varargin{1}; V = varargin(2:end); else V = varargin; end for n = 1:2:size(V,2) switch V{n} case 'Name1' NV1 = V{n+1}; case 'Name2' NV2 = V{n+1} otherwise error('Error.') end end end end
В той же папке, что и myFunc
, создайте следующее описание сигнатуры функции в файле с именем functionSignatures.json
. Имена входа не совпадают с именами в теле myFunc
, но согласуются с текстом справки.
{ "_schemaVersion": "1.0.0", "myFunc": { "inputs": [ {"name":"in1", "kind":"required", "type":["numeric"], "purpose":"ID of item"}, {"name":"in2", "kind":"required", "type":["numeric"], "purpose":"# Items"}, {"name":"in3", "kind":"ordered", "type":["numeric"], "purpose":"Input Value"}, {"name":"Name1", "kind":"namevalue", "type":["logical","scalar"],"purpose":"Option"}, {"name":"Name2", "kind":"namevalue", "type":["char", "choices={'Default','Choice1','Choice2'}"]} ] } }
MATLAB использует это описание сигнатуры функции, чтобы информировать о предложениях и завершении кода.
MATLAB использует информацию сигнатуры функции в файле JSON, чтобы отобразить совпадающие синтаксисы при вводе (подсказчике функций). Вы можете заполнить частично введенный текст, нажав клавишу < reservedrangesplaceholder0 > (заполнение клавишей Tab (заполнение клавишей Tab). В Командном окне или Редакторе MATLAB не использует файл JSON для отображения подсказчика функций. Поведение подсказчиков функций и заполнении клавишей Tab суммируется в таблице.
Инструмент | Подсказчики функций | Заполнение клавишей Tab |
---|---|---|
Live Editor | Да | Да |
Редактор | Нет | Да |
Командное окно | Нет | Да |
В Online™ MATLAB Редактор ведет себя так же, как и Live Editor.
Чтобы экспериментировать с предложениями кода в Live Editor, начните вызывать myFunc
из live скрипта. Отображаются имена и цели из файла JSON. MATLAB указывает, когда аргументы необязательны и доступно ли несколько предложений (таких как третий позиционный аргумент или пара "имя-значение"). Перечислены опции пар "имя-значение".
При добавлении аргумента пары "имя-значение" к вызову функции MATLAB представляет варианты из файла JSON. Начиная с 'Name1'
определяется как логический скаляр, MATLAB заполняет варианты автоматически (true
или false
). MATLAB принимает три значения для 'Name2'
аргумент из файла JSON.
Если функция имеет много синтаксисов, может быть полезно, чтобы предложения кода группировали синтаксисы как несколько сигнатур функции (независимо от реализации функции). Чтобы предоставить предложения кода и завершения для нескольких сигнатур, создайте несколько объектов функции с одним и тем же свойством в файле JSON.
Рассмотрим следующую функцию, которая следует по различным путям кода в зависимости от класса второго входа. Эта функция представлена в качестве примера для предложений кода и, следовательно, не выполняет никаких расчетов или проверок на ошибки.
function anotherFunc(arg1,arg2,arg3) switch class(arg2) case 'double' % Follow code path 1 case {'char','string'} % Follow code path 2 otherwise error('Invalid syntax.') end end
С точки зрения предложений кода рассмотрите функцию как имеющую две сигнатуры функции. Первая подпись принимает два необходимых числовых значения. Вторая подпись принимает необходимую цифру, за которой следует символ или строка, и, наконец, необходимую цифру. Чтобы задать несколько сигнатур функции, задайте несколько объектов функции в файле JSON с тем же свойством (имя функции).
{ "_schemaVersion": "1.0.0", "anotherFunc": { "inputs": [ {"name":"input1", "kind":"required", "type":["numeric"]}, {"name":"input2", "kind":"required", "type":["numeric"]} ] }, "anotherFunc": { "inputs": [ {"name":"input1", "kind":"required", "type":["numeric"]}, {"name":"input2", "kind":"required", "type":[["char"],["string"]]}, {"name":"input3", "kind":"required", "type":["numeric"]} ] } }
Кроме того, можно задать несколько сигнатур функций с помощью mutuallyExclusiveGroup
свойство объекта аргумента. Как правило, легче и более читаемо реализовать несколько объектов функции, но использование взаимоисключающих групп позволяет повторно использовать общие объекты аргументов, такие как input1
.
{ "_schemaVersion": "1.0.0", "anotherFunc": { "inputs": [ {"name":"input1", "kind":"required", "type":["numeric"]}, {"mutuallyExclusiveGroup": [ [ {"name":"input2", "kind":"required", "type":["numeric"]} ], [ {"name":"input2", "kind":"required", "type":[["char"],["string"]]}, {"name":"input3", "kind":"required", "type":["numeric"]} ] ] } ] } }
validateFunctionSignaturesJSON