Некоторые объекты MATLAB®, такие как графические объекты, реализуют интерфейс на основе set и get функции. Эти функции включают доступ к нескольким свойствам на массивах объектов в одном вызове функции.
Можно добавить set и get функциональность к вашему классу путем получения из одного из этих классов:
matlab.mixin.SetGet — использование, когда это необходимо, поддерживает для нечувствительного к регистру, частичного соответствия имени свойства. Получение из matlab.mixin.SetGet не влияет на точное имя свойства, требуемое при помощи ссылки записи через точку на свойства.
matlab.mixin.SetGetExactNames — используйте, когда это необходимо, чтобы поддержать только чувствительное к регистру полное соответствие имени свойства.
Примечание
set и get методы, упомянутые в этом разделе, отличаются от доступа к набору свойств, и свойство получают методы доступа. См. Методы доступа к свойствам для получения информации о методах доступа свойства.
Используйте абстрактный класс matlab.mixin.SetGet или matlab.mixin.SetGetExactNames как суперкласс:
classdef MyClass < matlab.mixin.SetGet ... end
Поскольку matlab.mixin.SetGet и matlab.mixin.SetGetExactNames выведите из handle класс, вашим подклассом является также handle класс.
get метод возвращает значение свойства объекта с помощью указателя на объект и имени свойства. Например, примите H указатель на объект:
v = get(H,'PropertyName');Если вы задаете массив указателей с одним именем свойства, get возвращает значение свойства для каждого объекта как массив ячеек значений:
CV = get(H,'PropertyName');CV массив всегда является столбцом независимо от формы H.
Если вы задаете массив ячеек char векторные имена свойства и массив указателей, get возвращает массив ячеек значений свойств. Каждая строка в ячейке соответствует объекту в массиве указателя. Каждый столбец в ячейке соответствует имени свойства.
props = {'PropertyName1','PropertyName2'};
CV = get(H,props);
get возвращает массив ячеек m на n, where m = length(H) и n = length(props).
Если вы задаете массив указателя, но никакие имена свойства, get возвращает массив типа struct в котором каждая структура в массиве соответствует объекту в H. Каждое поле в каждой структуре соответствует свойству, заданному классом H. Значение каждого поля является значением соответствующего свойства.
SV = get(H);
Если вы не присваиваете выходную переменную, то H должен быть скаляр.
Для примера смотрите Используя, добираются с Массивами Указателей.
set метод присваивает заданное значение заданному свойству для объекта с указателем H. Если H массив указателей, MATLAB присваивает значение свойству для каждого объекта в массиве H.
set(H,'PropertyName',PropertyValue)Можно передать массив ячеек имен свойства и массив ячеек значений свойств к set:
props = {'PropertyName1','PropertyName2'};
vals = {Property1Value,Property2Value};
set(H,props,vals)Если length(H) больше один, затем массив ячеек значения свойства (vals) может иметь значения для каждого свойства в каждом объекте. Например, предположите length(H) 2 (два указателя на объект). Вы хотите присвоить два значений свойств на каждом объекте:
props = {'PropertyName1','PropertyName2'};
vals = {Property11Value,Property12Value;Property21Value,Property22Value};
set(H,props,vals))
Предыдущий оператор эквивалентен следованию за двумя операторами:
set(H(1),'PropertyName1',Property11Value,'PropertyName2',Property12Value) set(H(2),'PropertyName1',Property21Value,'PropertyName2',Property22Value)
Если вы задаете скалярный указатель, но никакие имена свойства, set возвращает struct с одним полем для каждого свойства в классе H. Каждое поле содержит массив пустой ячейки.
SV = set(h);
Этот демонстрационный класс задает установить/получить интерфейс и иллюстрирует поведение унаследованных методов:
classdef LineType < matlab.mixin.SetGet properties Style = '-' Marker = 'o' end properties (SetAccess = protected) Units = 'points' end methods function obj = LineType(s,m) if nargin > 0 obj.Style = s; obj.Marker = m; end end function set.Style(obj,val) if ~(strcmpi(val,'-') ||... strcmpi(val,'--') ||... strcmpi(val,'..')) error('Invalid line style ') end obj.Style = val; end function set.Marker(obj,val) if ~isstrprop(val,'graphic') error('Marker must be a visible character') end obj.Marker = val; end end end
Создайте экземпляр класса и сохраните его указатель:
h = LineType('--','*');
Запросите значение любого свойства объекта с помощью наследованного get метод:
get(h,'Marker')
ans = '*'
Установите значение любого свойства с помощью наследованного set метод:
set(h,'Marker','Q')
MATLAB вызывает методы доступа свойства (set.Style или set.Marker в LineType класс), когда вы используете set и get методы.
set(h,'Style','-.-')
Error using LineType/set.Style (line 20)
Invalid line styleДля получения дополнительной информации о методах доступа свойства см. Методы доступа к свойствам
Возвратите struct содержа свойства объектов и их текущие значения с помощью get:
h = LineType('--','*'); SV = get(h)
SV =
struct with fields:
Style: '--'
Marker: '*'
Units: 'points'Возвратите struct содержа свойства, которые имеют public
SetAccess использование set:
S = set(h)
S =
struct with fields:
Style: {}
Marker: {}LineType класс задает Units свойство с SetAccess = protected. Поэтому S = set(h) не создает поле для Units в S.
set не может возвратить возможные значения для свойств, которые имеют непубличный доступ к набору.
get с массивами указателейПредположим, что вы создаете массив LineType объекты:
H = [LineType('..','z'),LineType('--','q')]
H =
1x2 LineType with properties:
Style
Marker
UnitsКогда H массив указателей, get возвращается (length(H)- 1) массив ячеек значений свойств:
CV = get(H,'Style')
CV =
2×1 cell array
{'..'}
{'--'}Когда H массив указателей, и вы не задаете имя свойства, get возвращает struct массив, содержащий поля с именами, соответствующими PropertyName. Присвойте выход get к переменной, когда H не скаляр.
SV = get(H)
SV =
2x1 struct array with fields:
Style
Marker
UnitsПолучите значение Marker свойство от второго элемента массива в SV массив структур:
SV(2).Marker
ans = 'q'
Можно передать массив указателей, массив ячеек имен свойства и массив ячеек значений свойств к set. Массив ячеек значения свойства должен поссориться значений свойств для каждого объекта в H. Каждая строка должна иметь значение для каждого свойства в массиве имени свойства:
H = [LineType('..','z'),LineType('--','q')]; set(H,{'Style','Marker'},{'..','o';'--','x'})
Результат этого вызова set :
H(1)
ans =
LineType with properties:
Style: '..'
Marker: 'o'
Units: 'pointsH(2)
ans =
LineType with properties:
Style: '--'
Marker: 'x'
Units: 'points'Настройте способ, которым списки свойств отображаются путем переопределения следующих методов в подклассе:
setdisp — Когда вы вызываете set без выходного аргумента и одного скалярного входа указателя, set вызовы setdisp определить, как отобразить список свойств.
getdisp — Когда вы вызываете get без выходного аргумента и одного скалярного входа указателя, get вызовы getdisp определить, как отобразить список свойств.
Классы, которые выводят из matlab.mixin.SetGet может использовать PartialMatchPriority атрибут свойства, чтобы задать относительный приоритет для частичного соответствия имени. MATLAB применяет этот атрибут при решении неполных и нечувствительных к регистру текстовых строк то соответствие больше чем одно имя свойства.
Наследованный set и get методы могут разрешить неточные имена свойства, когда нет никаких неоднозначностей, следующих из неточных строк имени. Когда частичное имя свойства неоднозначно, потому что имя совпадает больше чем с одним свойством, PartialMatchPriority значение атрибута может определить, какое свойство MATLAB соответствует.
Приоритет по умолчанию эквивалентен PartialMatchPriority = 1. Чтобы уменьшать относительный приоритет свойства, установите PartialMatchPriority к положительному целочисленному значению 2 или больше. Приоритет свойства уменьшается как значение PartialMatchPriority увеличения.
Например, в этом классе Verbosity свойство имеет более высокий приоритет для имени, соответствующего, чем Version свойство.
classdef MyClass < matlab.mixin.SetGet properties Verbosity end properties (PartialMatchPriority = 2) Version end end
Вызов set метод с потенциально неоднозначным неточным именем Ver устанавливает Verbosity свойство из-за его более высокого относительного приоритета. Не устанавливая PartialMatchPriority припишите, неоднозначное имя вызвало бы ошибку.
a = MyClass;
set(a,"Ver",10)
disp(a) MyClass with properties:
Verbosity: 10
Version: []Тот же выбор имени применяется к get метод.
v = get(a,"Ver")v =
10
Соответствие полного имени с несоответствием со случаем более приоритетно по сравнению с частичным соответствием с более высоким приоритетным свойством. Например, этот класс задает BaseLine свойство с приоритетом 1 (значение по умолчанию) и Base свойство с приоритетом 2 (ниже, чем 1).
classdef MyClass < matlab.mixin.SetGet properties BaseLine end properties (PartialMatchPriority = 2) Base end end
Вызов set метод со строкой base устанавливает Base свойство. BaseLine имеет более высокий приоритет, но соответствие полного имени с неправильным случаем более приоритетно.
a = MyClass;
set(a,"base",-2)
disp(a) MyClass with properties:
BaseLine: []
Base: -2Можно использовать PartialMatchPriority припишите, чтобы не вводить несовместимости кода при добавлении нового свойства. Например, этот класс включает set и get методы, чтобы относиться к Distance свойство со строкой Dis потому что DiscreteSamples свойство имеет более низкий приоритет.
classdef Planet < matlab.mixin.SetGet % Version 1.0 properties Distance end properties(PartialMatchPriority = 2) DiscreteSamples end end
Версия 2.0 класса вводит свойство под названием Discontinuities. Чтобы предотвратить возможность порождения неоднозначного частичного имени свойства в существующем коде, используйте PartialMatchPriority установить приоритет Discontinuities ниже, чем то из ранее существующих свойств.
classdef Planet < matlab.mixin.SetGet % Version 2.0 properties Diameter; NumMoons = 0 ApparentMagnitude; DistanceFromSun; end properties(PartialMatchPriority = 2) DiscreteSamples; end properties(PartialMatchPriority = 3) Discontinuities = false; end end
Для версии 1.0 Planet класс, этот вызов set метод не был неоднозначен.
p = Planet;
set(p,"Disc",true)Однако с введением Discontinuities свойство, строка Disc становится неоднозначным. Путем предоставления Discontinuities свойство более низкий приоритет, строка Disc продолжает совпадать с DiscreteSamples свойство.
Примечание
Когда запись повторно используемого кода, использование полных, чувствительных к регистру имен свойства избегают неоднозначностей, предотвращают несовместимости с последующими релизами программного обеспечения и производят больше читаемого кода.
get | matlab.mixin.SetGet | matlab.mixin.SetGetExactNames | set