4

我有一个对象,Person p;。以下属性是p的属性:

Properties:
     PersonName: 'John Doe'
     JobType: [1x1 JobTypes]

JobType 是来自JobTypes包含 JobType 枚举的类的对象。我想看到JobType: Manager而不是JobType: [1x1 JobTypes]. 有什么想法吗?

4

2 回答 2

4

我从不喜欢 Matlab 中的枚举类——对我来说太麻烦了。因此,我的经验太少,无法真正理解这里发生了什么。不过,我会尝试:枚举类只有一个值。它不是一个字符串。像

J = JobTypes.Manager

JobTypes类对象赋给变量J,设置为关联的值Manager。该值由 Matlab 内部选择,永远不会显示给用户。它J = Manager在命令行上显示得很好,这是由于 Matlab 的标准dispdisplay枚举类的实现。我认为这种方法不能与display另一个类中的调用结合使用。

为了避免这种情况,您可以为您定义自己的display方法Person

classdef Person < handle

    properties
        PersonName = 'John Doe'
        JobType  = JobTypes.Manager
    end

    methods       
        function  display(self)   
            fprintf(...
                ['Properties:\n',...
                '   Personname: ''%s''\n',...
                '      JobType: %s\n'],...
                   self.PersonName,...
                   self.JobType.char);            
        end
    end

end

JobType.char是 Matlab 版本的 a toStringfor 枚举类,所以插入它fprintf会显示实际的字符串!(为此感谢@zagy)

看看 Mathworks 如何实现display他们自己的一些类的方法,以了解如何在显示中获取到超类、方法、事件等的链接。

于 2012-08-24T12:59:59.440 回答
2

您需要覆盖类的display(obj)disp(obj)方法来实现这一点。

也许这两页有帮助1、2

于 2012-08-24T12:59:31.357 回答