В дополнение к пользовательским параметрам отображения, описанным в Пользовательском интерфейсе CustomDisplay, можно также настроить путь MATLAB® отображения возражают в компактных сценариях отображения. сценарии Compact display происходят, когда объектный массив в контейнере, таком как структура, массив ячеек или таблица. Можно настроить способ, которым массивы объектов отображены в компактном отображении путем наследования matlab.mixin.CustomCompactDisplayProvider
.
CustomCompactDisplayProvider
обеспечивает опции настройки в двух основных областях компактных отображений:
Однострочное размещение — отображение объектного массива ограничено одной строкой. Это размещение отображения происходит, когда объектный массив содержится в структуре, массиве ячеек или свойстве объекта MATLAB. Замените CustomCompactDisplayProvider
метод compactRepresentationForSingleLine
настроить это размещение.
Колоночное размещение — объектный массив отображен в нескольких строках как часть ориентированных на столбец или табличных данных. Это размещение отображения происходит, когда объектный массив содержится в табличной переменной. Замените CustomCompactDisplayProvider
метод compactRepresentationForColumn
настроить это размещение.
Три дополнительных CustomCompactDisplayProvider
служебные методы позволяют вам управлять, сколько из данных используется, чтобы создать отображение объектного массива:
partialDataRepresentation
— Компактное отображение объектного массива создается только из ведущих элементов набора данных или только начальных и конечных элементов, не используя промежуточные значения.
fullDataRepresentation
— Компактное отображение объектного массива создается на основе целого набора данных.
widthConstrainedDataRepresentation
— Компактное отображение объектного массива создается из данных на основе ограничения ширины, которое вы обеспечиваете.
Каждый из этих трех служебных методов также обеспечивает Annotation
аргумент значения имени, который позволяет вам включать вектор-строку из строк, чтобы служить дескрипторами в ваших компактных отображениях. Например, в случае класса, представляющего полиномы, добавляя аннотацию, может быть полезным когда только размерности и класс совпадения данных в отображении:
struct with fields: prop1: [1x3 sym] (Third-order polynomial)
Когда, рассматривая, как настроить компактное отображение для класса, сначала запишите класс без любой индивидуальной настройки и теста, чтобы видеть, должны ли параметры отображения по умолчанию быть изменены для вашего приложения. Например, этот класс хранит один полином как строку и ее порядок как double
.
classdef Polynomial properties polynomialString string {mustBeScalarOrEmpty}; polynomialOrder double {mustBeScalarOrEmpty}; end methods function obj = Polynomial(polyString,polyOrder) obj.polynomialString = polyString; obj.polynomialOrder = polyOrder; end end end
Полный код этого класса с индивидуально настраиваемой компактной функциональностью отображения доступен в конце примера.
Создайте экземпляр Polynomial
. Отобразите экземпляр в массиве ячеек, чтобы проверять однострочное размещение.
poly = "(x^10)/100 + 300*x^9 + 200*x^8 + 4000*x^7 + 600*x^6 + 700*x^5 + 45*x^4 + 90*x^3 + 4*x^2 + 100*x^(1/2) + 1";
a = Polynomial(poly,10);
{a}
ans = 1×1 cell array {1×1 Polynomial}
Однострочное размещение не предоставляет пользователям много информации. Измените Polynomial
наследоваться matlab.mixin.CustomCompactDisplayProvider
и замените compactRepresentationForSingleLine
метод. Вызовите служебный метод widthConstrainedDataRepresentation
с TruncateScalarObject
установите на true
. MATLAB теперь обрезает полиномиальную строку на основе доступной ширины.
function displayRep = compactRepresentationForSingleLine(obj,displayConfiguration,width) displayRep = widthConstrainedDataRepresentation(obj,displayConfiguration,width,... StringArray=obj.polynomialString,TruncateScalarObject=true); end
Теперь отображение экземпляра в массиве ячеек содержит как можно больше строки.
{a}
ans = 1×1 cell array {[(x^10)/100 + 300*x^9 + 200*x^8 + 4000*x^7 + 600*x^6 + 700*x^5 + 45*x^4 + 90*x^3 + 4*x^2 + 100*x^(1/2) …]}
Для табличного отображения значение по умолчанию показывает только класс и размерности, так замените compactRepresentationForColumn
. Метод возвращает экземпляр matlab.display.DimensionsAndClassNameRepresentation
с аннотацией, которая в этом случае идентифицирует порядок полинома. Покрывать случай, когда таблица имеет вектор-строку из Polynomial
экземпляры в однократном въезде, метод изменяет polynomialOrder
свойство совпадать с формой экземпляра и затем находит максимальный порядок в той строке для отображения.
function displayRep = compactRepresentationForColumn(obj,displayConfig,width) import matlab.display.DimensionsAndClassNameRepresentation; polOrder = reshape([obj.polynomialOrder],size(obj)); maxPolOrderPerRow = max(polOrder,[],2); annotationStr = "Polynomial of order " + string(maxPolOrderPerRow); displayRep = DimensionsAndClassNameRepresentation(obj,... displayConfig,Annotation=annotationStr); end
С этим кодом на месте, можно составить таблицу результатов оценки, например, который идентифицирует порядок полинома. Создайте второй Polynomial
B
. Затем составьте две таблицы, один с a
и b
в столбце, и один с a
и b
в той же строке.
b = Polynomial("x^3 + x^2 + x",3);
Result = [1;2];
Estimate = [a;b];
T = table(Result,Estimate)
T = 2×2 table Result Estimate ______ _________________________________________ 1 1×1 Polynomial (Polynomial of order 10) 2 1×1 Polynomial (Polynomial of order 3)
С a
и b
в той же строке только отображен максимальный порядок.
Result = 1; Estimate = [a b]; T1 = table(Results,Estimate)
T1 = 1×2 table Result Estimate _______ _________________________________________ 1 1×2 Polynomial (Polynomial of order 10)