首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在MATLAB对象中显示枚举值

如何在MATLAB对象中显示枚举值
EN

Stack Overflow用户
提问于 2014-03-04 00:30:11
回答 1查看 993关注 0票数 7

给定以下两个类

代码语言:javascript
运行
复制
classdef EnumClass

    enumeration
        enumVal1
        enumVal2
    end
end


classdef EnumDisplay

    properties
        enumValue = EnumClass.enumVal1
        numberValue = 1
    end
end

显示EnumClass时,将显示值:

代码语言:javascript
运行
复制
>> E = EnumClass.enumVal1

E = 

    enumVal1

但在命令窗口中显示EnumDisplay时,枚举值将被抑制,仅显示数组大小和类。

代码语言:javascript
运行
复制
>> C = EnumDisplay()

C =

  EnumDisplay with properties:

      enumValue: [1x1 EnumClass]
    numberValue: 1

使枚举值显示在类特性列表中的最简单方法是什么。也就是说,有没有一种简单而通用的方法来显示类,如下所示:

代码语言:javascript
运行
复制
>> C = EnumDisplay()

C =

  EnumDisplay with properties:

      enumValue: enumVal1
    numberValue: 1

我怀疑这与从某个地方的matlab.mixin.CustomDisplay类继承有关,但我希望它尽可能通用,以限制我需要为每个枚举类和/或在属性中具有枚举值的每个类执行的代码量。

部分解

我能够找出这个问题的部分解决方案,但它不是很令人满意。

代码语言:javascript
运行
复制
classdef EnumDisplay < matlab.mixin.CustomDisplay

    properties
        enumValue = EnumClass.enumVal1
        numberValue = 1
    end

    methods (Access = protected)
        function groups = getPropertyGroups(This)
            groups = getPropertyGroups@matlab.mixin.CustomDisplay(This);
            groups.PropertyList.enumValue = char(This.enumValue);
        end
    end
end

现在显示如下:

代码语言:javascript
运行
复制
>> C = EnumDisplay()

C = 

  EnumDisplay with properties:

      enumValue: 'enumVal1'
    numberValue: 1

这就差不多了,但还不完全是。我不希望枚举值包含在引号中。

EN

回答 1

Stack Overflow用户

发布于 2016-01-31 17:02:12

好吧,那么..。这不是最优雅的方法--当然不像使用matlab.mixin.CustomDisplay那么优雅--但一种可能的方法是尝试自己复制该功能,以提供更多的控制。这是我在渡轮上一起黑出来的。

代码语言:javascript
运行
复制
classdef EnumDisplay

    properties
        enumValue = EnumClass.enumVal1
        numberValue = 1
    end

    methods
        function disp(This)
            cl = class(This) ;
            fprintf('  <a href="matlab:helpPopup %s">%s</a> with properties: \n\n',cl,cl) ;
            prop = properties(This) ;
            len = max(cellfun(@length,prop)) ;

            for ii = 1:numel(prop)
                if isnumeric(This.(prop{ii}))
                    fmt = '%g' ;
                else
                    fmt = '%s' ;
                end
                filler = char(repmat(32,1,4+len-length(prop{ii}))) ;
                fprintf('%s%s: ',filler,prop{ii}) ;
                fprintf(sprintf('%s \n',fmt),char(This.(prop{ii}))) ;
            end
        end
    end
end

结果:

代码语言:javascript
运行
复制
>> C = EnumDisplay()

C = 

  EnumDisplay with properties: 

      enumValue: enumVal1 
    numberValue: 1 

唯一需要注意的是,这可能不是完全通用的,因为我可能没有适当地涵盖所有可能的格式fmt。但如果你真的绝望了,也许这样的方法可以奏效。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22152029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档