matlab - 更改 Matlab 结构时的向后兼容性

标签 matlab

我正在用附加功能扩展现有的 Matlab 程序。原程序用一个结构体表示相空间中的一个稳态点,这个结构体有4个域,像这样:

oldstylepoint =
    kind: 'stst'
    parameter: [0.7846 1]
    x: -2.0010
    stability: [1x1 struct]

在我的扩展中,我希望该结构有 5 个字段(即一个额外的字段)。对于大多数点,该字段只是空的,但对于某些特殊( fork )点,它会包含一些文本(命名 fork 发生的类型)。所以它看起来像

newstylepoint =
    kind: 'stst'
    parameter: [0.7846 1]
    x: -2.0010
    stability: [1x1 struct]
    flag: 'hopf'

但是现在我们遇到了一个问题。像这样的点存储在数组(分支)中,并且大多数分支都是迭代构建的。所以现有的程序有几个子程序做这样的事情

newbranch = [oldbranch, newpoint]
newbranch(1) = pointzero
newbranch(N+1) = newpoint

现在,如果分支由“旧式”点(有 4 个字段)组成,而我想添加一个“新式”点(有 5 个字段),Matlab 会给出连接错误。

那么现在我的问题是:有什么方法可以告诉 Matlab 它应该在连接时自动创建缺失的字段?还是有另一种优雅的方式来解决这个问题?

(当然,我可以编辑所有现有的子例程以确保它们处理的所有点都获得新字段(设置为“”),如果它们还没有的话。但我更愿意尽可能少地更改现有代码.反过来,确保所有传入点(作为参数传递给现有例程)也是“新样式”也很困难。)

最佳答案

不幸的是,我不知道有什么优雅的方式。

但是是的,您可以完全按照帖子中的描述进行操作。

  • isfield检查它是否存在。
  • 根据需要添加字段(使用 setfield 或短的 . 符号)

关于matlab - 更改 Matlab 结构时的向后兼容性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19138251/

相关文章:

matlab - 在matlab中打印多个图形

arrays - Matlab - 两条线的距离

matlab - 为什么我的图像无法在 MATLAB 中正确加载?

matlab - 无法在 MATLAB 中接受匿名函数的输入

c++ - 相当于 C++ 的 MATLAB 函数 resample

matlab - matlab中分割遮挡叶子的分水岭分割算法

MATLAB surf meshgrid 问题 - 2 个向量 1 个矩阵 - 曲面图

Matlab "Find"命令用于获取值列表?如何找到列表中给定值的索引值?

matlab - 如何确定数字从 MATLAB 中打印的位置?

matlab - 我怎样才能有效地找到分类器的准确性