【问题标题】:Nested Classes in MATLABMATLAB 中的嵌套类
【发布时间】:2013-09-04 08:55:17
【问题描述】:

我有 2 节课:

classdef Car
    properties 
        make;
    end
    methods
        function obj=Car(MyMake)
            obj.make=MyMake;
        end
    end
end

classdef Engine
    properties
        power;
    end
    methods
        function obj=Engine(bhp)
            obj.power=bhp;
        end
    end
end

我应该如何在 Car 类中嵌套 Engine 类?

我的想法是按照Honda.Engine.Valve.getDiameter() 的方式做一些事情

在 Python 中,我需要做的就是缩进,我不知道在这里做什么。

【问题讨论】:

    标签: matlab class oop nested-class


    【解决方案1】:

    我不相信你可以在 Matlab 中嵌套类。但是,您仍然可以(或多或少)使用常规类并将“嵌套类”指定为“包含类”的属性来实现(或多或少)您想要的结果。

    例如:

    classdef Nested
        methods
            function this=Nested()
                % Yep.
            end
        end
    end
    
    classdef Box
        properties
            nested
        end
        methods
            function this=Box()
                this.nested = Nested();
            end
        end
    end
    

    这将不允许“嵌套”类访问“包含”类的属性,但它可以提供与您描述的相同的嵌套访问。

    有关详细信息,请参阅http://www.mathworks.com/help/matlab/matlab_oop/saving-class-files.html。例如,此页面声明:

    在文件夹中创建一个独立的类定义文件 MATLAB® 路径。文件名必须与类匹配(并且 构造函数)名称,并且必须具有 .m 扩展名。定义类 完全在这个文件中。

    因此,嵌套类将违反此语法,因为它们不包含在 Matlab 路径上自己的文件中。

    我以前没有使用过 Matlab 包,但您可以使用包来确定您的特定组织和功能。见http://www.mathworks.com/help/matlab/matlab_oop/scoping-classes-with-packages.html

    祝你好运!

    【讨论】:

    • 我觉得我需要这样做。感谢您的参考。
    • +1 就范围而言,不幸的是,类不能在 MATLAB 中设为私有(因此嵌套或内部类是不可能的),它们始终在全局范围内可用。至于命名空间,包确实是一种解决方案,您可以创建一个目录结构为:+pkg1/+pkg2/@ClassA 实例化为obj = pkg1.pkg2.ClassA
    猜你喜欢
    • 1970-01-01
    • 2016-03-17
    • 1970-01-01
    • 2013-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-18
    • 1970-01-01
    相关资源
    最近更新 更多