将自定义数据(字符串标记)附加到MATLAB cfit对象

时间:2015-03-01 12:41:38

标签: matlab oop properties subclassing undocumented-behavior

我有一个代码,其中cfit个对象在函数\类之间来回传递,我希望有一个"tag",其中包含一些关于我的拟合的信息(即它的名称),这样的我会在某个时刻对其进行实例化,并且可以在以后需要时访问它。

理想情况下,这将在对象内部,因此无论何时我需要访问信息,都可以使用它而无需拖动(或在appdata)其他矢量\ cells。

尝试&思想

通常,只需子类化cfit并添加包含此数据的属性。但是,cfit的声明(见下文)告诉我们它是Sealed,因此无法进行子类化。

classdef (Sealed = true) cfit < fittype

或者,我们可以尝试“劫持”当前对象未使用的某些属性,并使用 it 来存储所需的数据(not that it's a technical problem,但这相当于忽略开发商警告说不应该触及这些属性。)

此外,从上面的classdef我们也知道这是fittype的子类,它可能有一些我们可以用于此目的的属性\方法。

最后,问题仍然存在 - 保存我的额外数据的最佳位置是什么,因此设置\ get(方便)意味着方便如果我想在循环中访问它,我不必使用eval()),并且不会干扰cfit个对象的正常操作?

2 个答案:

答案 0 :(得分:1)

似乎有效的一种方法是访问.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

建议小心:我没有测试此解决方案是否会影响正常操作。

答案 1 :(得分:0)

而不是子类cfit,创建一个新类并将cfit对象作为属性存储,并将您的标记存储为另一个属性。