Прикрепление пользовательских данных (строковый тег) к объекту MATLAB cfit
У меня есть код где cfit
объекты передаются туда и обратно между функциями \ классами, и я хотел бы иметь "тег", который содержит некоторую информацию о моем соответствии (то есть его имени), чтобы я мог создать его экземпляр в какой-то момент и получить к нему доступ позже, когда это будет необходимо.
В идеале это должно быть прямо внутри объекта, так что когда бы мне ни понадобился доступ к информации, она доступна без необходимости перетаскивать (или в appdata
) дополнительные векторы \ клетки.
Попытки и Мысли
Обычно, просто подкласс cfit
и добавьте свойство, которое содержит эти данные. Тем не менее, декларация cfit
(см. ниже) говорит нам, что это Sealed
и, следовательно, не может быть разделено на подклассы.
classdef (Sealed = true) cfit < fittype
В качестве альтернативы, мы можем попытаться "захватить" некое свойство, которое не используется текущими объектами, и использовать его для хранения требуемых данных ( не то, чтобы это была техническая проблема, но это эквивалентно игнорированию предупреждений разработчиков о том, что эти свойства не должны). не трогай).
Кроме того, из вышесказанного classdef
мы также узнаем, что это подкласс fittype
которые могут иметь некоторые свойства \ методы, которые мы могли бы использовать для этой цели.
Наконец, остается вопрос - как лучше всего сохранить мой дополнительный бит данных, чтобы было удобно устанавливать \ получать (удобно означает, что если я хочу получить к нему доступ внутри цикла, мне не нужно использовать eval()
), и не мешает нормальной работе cfit
объекты?
2 ответа
Один способ, который, кажется, работает, - это доступ к .p
структура cfit
объект и добавление к нему чего угодно:
До:
>> F378
F378 =
Shape-preserving (pchip) interpolant:
F378(x) = piecewise polynomial computed from p
Coefficients:
p = coefficient structure
>> F378.p
ans =
form: 'pp'
breaks: [1x40 double]
coefs: [39x4 double]
pieces: 39
order: 4
dim: 1
После F378.p.tag = '3.78';
:
F378.p
ans =
form: 'pp'
breaks: [1x40 double]
coefs: [39x4 double]
pieces: 39
order: 4
dim: 1
tag: '3.78'
Я нашел это из следующей ошибки:
Error using cfit/subsref (line 18)
The name 'probnames' is not a coefficient or a problem parameter. You can only use dot
notation to access the coefficients and problem parameters of a cfit or sfit, for example
'f.p'.
For the current object the properties you can access like this are:
p
Рекомендуется осторожность: я не проверял, мешает ли это решение нормальной работе.
Вместо того, чтобы подкласс cfit
создать новый класс и сохранить cfit
объект как свойство вместе с вашим тегом как другое свойство.