使数据结构可用于类的所有实例?
Posted
技术标签:
【中文标题】使数据结构可用于类的所有实例?【英文标题】:Making a data structure available to all instances of a class? 【发布时间】:2017-04-02 10:42:58 【问题描述】:我有一个节点数据结构,它表示二叉树中的节点。我有一些与整个树相关的数据,而不是将其副本存储在每个节点中,我只是将索引存储在用于访问此全局数据的节点中。所以我的Node
类有一个常量属性TreeData
,其中包含我希望所有节点都可以使用的数据:
classdef Node
properties (Constant)
treeData = TreeData
end
...
...
end
TreeData 被定义为
classdef TreeData < handle
properties
s
w
end
end
这很好用,但是它有一个完整的额外类 (TreeData
) 只是为了定义所有节点都应该可以访问的两个变量。那么有没有更好的方法来做到这一点?在另一种语言中,我只会在 Node
类中声明一个静态变量来保存这些数据,但在 MATLAB 中,您似乎需要静态变量的 getter 和 setter,这最终会导致必须编写比这更多的代码TreeData
类。
我不只是想要一些有效的东西,我已经有了它,我正在寻找最有效/最佳实践的方法来使数据结构可用于 MATLAB 中类的所有实例。
【问题讨论】:
This answer 展示了在 MATLAB 中使用persistent
变量的“静态变量”演示(参见第一个 sn-p 中的 function out = currentClass(input)
)。
【参考方案1】:
最简单的方法可能是只定义一个全局变量。如果您使用足够长的名称,则很有可能永远不会发生命名冲突。很简单,是的。最佳实践,没有。
Matlab does have static-like variables,但他们使用关键字persistent
。它们对于声明它们的函数是本地的,但它们的值在函数调用之间保留在内存中。这类似于其他一些语言允许您为函数创建静态局部变量的方式。
如果不知道您如何使用此变量,很难说出最适合您的情况的解决方案。如果变量是计数器,您可以创建一个adjustCounter
函数,该函数接受一个数量来调整计数器并返回新值。获取计数器值只是告诉它调整 0 的问题。
Here 是另一个类似的问题,有几个不同的建议解决方案。
【讨论】:
以上是关于使数据结构可用于类的所有实例?的主要内容,如果未能解决你的问题,请参考以下文章