Matlab 在嵌套包中调用函数

Matlab 在嵌套包中调用函数,matlab,oop,Matlab,Oop,我正在尝试将我的matlab代码组织到包中,但是在嵌套的包函数中必须使用完全限定的名称,这让我非常痛苦 假设我有一个名为+myPack的包,它看起来像这样: +myPack bar.m baz.m +mySuperPack foo.m +myPack bar.m baz.m 条形函数可能看起来像 function bar() myPack.baz() end 这一切都是合理的。但是,+myPack是一个组件,将在多个其

我正在尝试将我的matlab代码组织到包中,但是在嵌套的包函数中必须使用完全限定的名称,这让我非常痛苦

假设我有一个名为+myPack的包,它看起来像这样:

+myPack
    bar.m
    baz.m
+mySuperPack
    foo.m
    +myPack
        bar.m
        baz.m
条形函数可能看起来像

function bar()
    myPack.baz()
end
这一切都是合理的。但是,+myPack是一个组件,将在多个其他包中重用。我们可以这样说:

+myPack
    bar.m
    baz.m
+mySuperPack
    foo.m
    +myPack
        bar.m
        baz.m
这一次,foo调用bar,而bar又调用baz。但是,bar的原始代码将失败,因为我没有使用完全限定的名称

mySuperPack.myPack.baz()
显然+myPack不知道它在哪个超级包中,所以我不能这么做

这也使您无法在包中的类中使用静态方法;类必须知道它在哪个包中才能调用自己的静态方法,这似乎很疯狂

有没有办法像这样使用嵌套包,或者我做的包是完全错误的?

而不是编写

mySuperPack.myPack.baz()
你可以写

import mySuperPack.myPack.*
baz()
只需编写一次导入语句。不幸的是(这是MATLAB中真正困扰我的少数几件事之一)
import
只导入到当前工作区,所以您需要为每个函数/方法编写一次

我真的希望您只需在文件顶部编写一次,然后将其导入到文件中的所有函数中,或者在类的顶部将其导入到类的所有方法中,但就这样了。至少总比到处都需要完全限定名要好


关于静态方法的问题:尽管您通常可以将它们称为
ClassName.staticMethodName
,或
pkgName.ClassName.staticMethodName
,但如果您有该类的对象
obj
,也可以使用
obj.staticMethodName
来调用它。显然,这并不总是相关的,但是如果您从普通方法中调用静态方法,这会很方便,因为您不需要提及(或导入)包。

对不起,我想您可能有点误解了。我知道我可以使用导入,但问题是我不知道导入什么。该类或包可以包含在任意数量的超级包中,因此在运行时不知道该方法的完全限定名。这有道理吗?对不起-是的,我误解了。您添加了一条注释,建议更好的方法是不在多个包中包含相同的子包,而是将其包含在单独的包中。我同意。嵌套包没有错,但是如果要重用包,请将其作为单独的包保留,不要将其多次复制到不同的子包中。我并不是完全复制包并将其粘贴到任何地方,而是使用SVN将其添加为外部包,我现在认为这是不必要的。谢谢你确认我做的不对。如果你想添加一个这样的答案,我会接受的。老实说,我认为在多个包中包含相同的子包是错误的,应该将子包放在另一个文件夹中,该文件夹也在matlab路径上。