我正在尝试将我的matlab代码组织到包中,但是必须在嵌套包函数中使用完全限定名称会让我感到害怕。
假设我有一个名为+ myPack的包,它看起来像这样:
+myPack
bar.m
baz.m
条形函数可能看起来像
function bar()
myPack.baz()
end
这一切都很好而合乎逻辑。但是,+ myPack是一个将在多个其他包中重用的组件。让我们说一个看起来像这样:
+mySuperPack
foo.m
+myPack
bar.m
baz.m
这一次,foo调用bar,bar又调用baz。但是,bar的原始代码将失败,因为我没有使用完全限定名称
mySuperPack.myPack.baz()
显然+ myPack不知道它是哪个超级包,所以我不能这样做。
这也使您无法在包中的类中使用静态方法;该类必须知道它在哪个包中调用自己的静态方法,这看起来很疯狂。
有没有办法像这样使用嵌套软件包,还是我的软件包完全错了?
答案 0 :(得分:0)
而不是写
mySuperPack.myPack.baz()
你可以写
import mySuperPack.myPack.*
baz()
您只需要编写一次import语句。不幸的是(这是使用MATLAB真正让我烦恼的少数几件事之一)import
只导入当前工作空间,所以你需要按函数/方法编写一次。
我真的希望你能在文件的顶部写一次,然后将它导入到文件中的所有函数中,或者导入到类的顶部并将其导入到所有文件中班级的方法,但你去。至少它比在任何地方总是需要完全合格的名字要好。
PS关于静态方法的问题:虽然您通常可以将它们称为ClassName.staticMethodName
或pkgName.ClassName.staticMethodName
,但如果您有该类的对象obj
,您也可以将其称为使用obj.staticMethodName
。显然,这并不总是相关的,但是如果您从普通方法中调用静态方法,则可以很方便,因为您不需要提及(或导入)包。