我正在用附加功能扩展现有的 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/