【问题标题】:How to make property definition using own class in Matlab?如何在 Matlab 中使用自己的类进行属性定义?
【发布时间】:2021-07-16 10:17:58
【问题描述】:

在 Matlab 中,我有包“+mypackage”。以下所有定义都在此文件夹/包下。
我的班级.m

classdef MyClass
    properties
        prop1 MyProperty
    end
    
    methods (Static)
        function obj = with_five()
            obj = mypackage.MyClass(5);
        end
    end
    
    methods
        function obj = MyClass(num)
            obj.prop1 = mypackage.MyProperty(num);
        end
    end
end

MyProperty.m

classdef MyProperty    
    properties
        num double
    end
    
    methods
        function obj = MyProperty(val)
            obj.num = val;
        end
    end
end

所以在 MyClass.m 中,我将 prop1 属性定义为 MyProperty 类的对象。
现在我想用这个脚本创建对象。

import mypackage.MyClass

class_test1 = MyClass(5);
class_test2 = MyClass.with_five();

当我运行它时,我得到以下错误:

Error using Testpackage (line 3)
Error defining property 'prop1' of class 'mypackage.MyClass':
Class named 'MyProperty' is undefined or does not support property validation.

当我从 MyClass.m 中删除属性定义时,它可以工作。 有没有办法在 Matlab 中将属性定义为自己的类的对象?

【问题讨论】:

  • 您只需要将prop1 定义为类mypackage.MyProperty 对吗?使用import 非常讨厌,因为当您不在不同的范围内时,您会认为所有内容都在公共名称空间中,如果您使用的是包,那么最好完全限定名称
  • 哦,这很简单。谢谢!我以为我已经尝试过了。用mypackage.MyProperty 定义prop1 有效!你的意思是在我的脚本中导入不是一个好主意?
  • 对于您遇到的问题,这不是一个好主意。命名空间很好,因为它们避免了shadowing,并允许您明确调用哪个函数。通过使用import,您可以将所有内容从该包中转储到主命名空间中,但仅限于您的脚本/函数的范围内——这在跨多个范围/文件工作时可能会造成混淆。您也显然失去了命名空间提供的优势

标签: matlab class typing


【解决方案1】:

感谢 Wolfie 的帮助! 我将prop1 的定义更改为mypackage.MyProperty
我的类定义现在看起来像这样:

classdef MyClass
    properties
        prop1 mypackage.MyProperty
    end
    
    methods (Static)
        function obj = with_five()
            obj = mypackage.MyClass(5);
        end
    end
    
    methods
        function obj = MyClass(num)
            obj.prop1 = mypackage.MyProperty(num);
        end
    end
end

必须在我的包mypackage 中指向MyProperty
否则 Matlab 无法找到它。
我在 Matlab 帮助中找到了它: https://de.mathworks.com/help/matlab/matlab_oop/scoping-classes-with-packages.html?s_tid=srchtitle#brfynt_-3

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-23
    • 2017-06-10
    相关资源
    最近更新 更多