在 Matlab 中将结构属性的字段作为类的属性

Posted

技术标签:

【中文标题】在 Matlab 中将结构属性的字段作为类的属性【英文标题】:Making the fields of a struct property as properties of the class in Matlab 【发布时间】:2016-02-16 21:07:27 【问题描述】:

我需要定义一个名为 MobileBaseStation 的类和一个名为 DataChannel 的属性,它是一个如下所示的结构,

classdef MobileBaseStation
properties
    DataChannel = struct('TxScheme','SpatialMux','NLayers',4);
end
properties (Constant = true)
    supportedTxSchemes = 'Port0','TxDiversity','CDD','SpatialMux','MultiUser','Port5','Port7-8','Port8','Port7-14';
end
methods
    function this = MobileBaseStation(this,TxSchemeChoice,NLayers)
        this.DataChannel.TxScheme = TxSchemeChoice;
        this.DataChannel.NLayers = NLayers;
    end
    function this = set.DataChannel.TxScheme(this,value)
        if ismember(value,this.supportedTxSchemes)
            this.DataChannel.TxScheme = value;
        end
    end
    function this = set.DataChannel.NLayers(this,value)
        if strcmpi(this.TxScheme,'Port8') && value==1
            set.DataChannel.NLayers = value;
        end
    end
end
end

setter 需要对 DataChannel 结构的字段实施边界/限制。我希望结构的字段成为 MobileBaseStation 类的属性,以便我可以使用设置器。如何在 Matlab 中实现这一点?

【问题讨论】:

DataChannel 创建一个新类,并使该类成为MobileBaseStation 类的属性 【参考方案1】:

我认为您希望将 DataChannel 设为私有,以便您可以通过依赖属性的 getter 和 setter 控制访问,例如:

classdef MobileBaseStation
    properties(GetAccess=private, SetAccess=private)
        DataChannel = struct('TxScheme','SpatialMux','NLayers',4);
    end

    ...

    properties(Dependent=true)
        TxScheme;
        NLayers;
    end

    methods
        function v = get.TxScheme(this), v = this.DataChannel.TxScheme; end
        function v = get.NLayers(this), v = this.DataChannel.NLayers; end

        function this = set.TxScheme(this,v)
            assert(ismember(v,this.supportedTxSchemes),'Invalid TxScheme - %s.',v);
            this.DataChannel.TxScheme = v;
        end

        ...
    end
end

【讨论】:

以上是关于在 Matlab 中将结构属性的字段作为类的属性的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 类中将函数作为属性访问

尝试编写一个矩形类,将长与宽作为矩形类的属性,在构造方法中将长。宽初始化,定义一个成员方法求此矩形的面积。

c#封装和类的属性课堂上机练习

在MATLAB中将XML内容解析为正确的数据类型时出现问题

带类的matlab - 将结构保存在空的双数组中

spring - 从类的静态字段中的属性文件中读取属性值