在嵌套包中调用函数

时间:2015-04-09 16:54:27

标签: matlab oop

我正在尝试将我的matlab代码组织到包中,但是必须在嵌套包函数中使用完全限定名称会让我感到害怕。

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

+myPack
    bar.m
    baz.m

条形函数可能看起来像

function bar()
    myPack.baz()
end

这一切都很好而合乎逻辑。但是,+ myPack是一个将在多个其他包中重用的组件。让我们说一个看起来像这样:

+mySuperPack
    foo.m
    +myPack
        bar.m
        baz.m

这一次,fo​​o调用bar,bar又调用baz。但是,bar的原始代码将失败,因为我没有使用完全限定名称

mySuperPack.myPack.baz()

显然+ myPack不知道它是哪个超级包,所以我不能这样做。

这也使您无法在包中的类中使用静态方法;该类必须知道它在哪个包中调用自己的静态方法,这看起来很疯狂。

有没有办法像这样使用嵌套软件包,还是我的软件包完全错了?

1 个答案:

答案 0 :(得分:0)

而不是写

mySuperPack.myPack.baz()

你可以写

import mySuperPack.myPack.*
baz()

您只需要编写一次import语句。不幸的是(这是使用MATLAB真正让我烦恼的少数几件事之一)import只导入当前工作空间,所以你需要按函数/方法编写一次。

真的希望你能在文件的顶部写一次,然后将它导入到文件中的所有函数中,或者导入到类的顶部并将其导入到所有文件中班级的方法,但你去。至少它比在任何地方总是需要完全合格的名字要好。

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