使数据结构可用于类的所有实例?

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 是另一个类似的问题,有几个不同的建议解决方案。

【讨论】:

以上是关于使数据结构可用于类的所有实例?的主要内容,如果未能解决你的问题,请参考以下文章

13.10类的设计原则

派生类中事件绑定的事件处理函数是类实例方法使其能访问父类和派生类所有数据

设计模式---工厂方法模式

同一线程中类的所有实例中的类的共享数据成员

19PHP 面向对象

php部分---面向对象(待续);