【问题标题】:How to correctly name and organize file classes for MATLAB?如何为 MATLAB 正确命名和组织文件类?
【发布时间】:2013-09-23 17:09:37
【问题描述】:

考虑以下目录结构,C:\magic 是当前的 MATLAB 文件夹:

C:\magic
C:\magic\+wand
C:\magic\+hat

现在,wandhat 是 MATLAB 包,可以由 import wand.*import hat.* 加载。

考虑一下我可能想在+hat 文件夹中为帽子创建一个抽象类:

% C:\magic\+hat\Hat.m
classdef Hat < handle
    % class implementation ...
end

还有一些子类:

% C:\magic\+hat\TopHat.m
classdef (Sealed) TopHat < Hat
    % class implementation
    methods
        function this = TopHat()
            this = this@Hat();
        end
    end
end

但是当我这样做时:

> import hat.*
> ha = TopHat()

我收到以下错误:

Error using hat.TopHat
The specified superclass 'Hat' contains a parse error or cannot be found
on MATLAB's search path, possibly shadowed by another file with the same name.

不过,我可以毫无错误地执行ha = Hat()

可能发生的情况以及解决此问题的最佳方法是什么?

提前致谢!

【问题讨论】:

标签: matlab oop import package fully-qualified-naming


【解决方案1】:

试试

classdef (Sealed) TopHat < hat.Hat

MATLAB 中没有“search-current-package-first”例程(对不起,名字不好 :>)。因此,要引用包中的类,您始终必须携带包名称 - 甚至例如在其自己的 classdef 中引用类的静态方法。

【讨论】:

  • 是的!我在提出这个问题后不久就尝试过了,它奏效了……我认为 MATLAB 非常杂乱无章,不是吗?这个问题不应该发生......
  • 与原生的面向对象编程语言相比,有时看起来有些人为。但是话又说回来,在我的印象中,MATLAB 中的 OOP 仍然非常少见。
  • imo 您可以将此归咎于 Matlab 中的导入功能……这有点原始。如果您考虑有效的语法,Matlab 需要了解范围,并且不查看同一个包等...希望 Mathworks 很快有一天会变得更好
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-28
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多