在导入类时调用带有索引的静态方法

时间:2012-05-03 22:52:29

标签: oop matlab

我在路径中的包文件夹myClass.m中有一个类文件+myPack。类文件的一个简单示例是:

classdef myClass
    properties
        prop
    end

    methods
        function obj = myClass(x)
            obj.prop = x;
        end
    end
end 

现在,如果我直接调用该方法并使用完整的包名访问该属性,即:

x = myPack.myClass(2).prop;

正确返回x = 2。现在,如果我通过导入此类(而不是使用包名称)尝试相同的操作:

import myPack.myClass
y = myClass(2).prop

它给了我以下错误:

  

无法对静态方法或构造函数调用建立索引。   不要跟随对静态方法或构造函数的调用   任何其他索引或点引用。

为什么这在第一种情况下有效而不是第二种情况?据我所知,import一个类主要允许一个人使用没有长包名的类名(以及其他考虑因素)。这两个导致此错误的区别是什么,我该如何解决?

1 个答案:

答案 0 :(得分:5)

这对你来说更奇怪:如果你在命令窗口,脚本或函数中运行,行为会有所不同!

1)命令提示符(1st:ok,2nd:error)

这是你已经展示过的

>> x = myPack.myClass(2).prop
x =
     2

>> import myPack.myClass; y = myClass(2).prop
Static method or constructor invocations cannot be indexed.
Do not follow the call to the static method or constructor with
any additional indexing or dot references. 

2)脚本(第1次:错误,第2次:错误)

testMyClassScript.m

x = myPack.myClass(2).prop
import myPack.myClass; y = myClass(2).prop

>> testMyClassScript
Static method or constructor invocations cannot be indexed.
Do not follow the call to the static method or constructor with
any additional indexing or dot references.
Error in testMyClassScript (line 1)
x = myPack.myClass(2).prop 

(第二行也会抛出相同的错误)

3)功能(第1名:好,第2名:确定)

testMyClassFunction.m

function testMyClassFunction()
    x = myPack.myClass(2).prop
    import myPack.myClass; y = myClass(2).prop
end

>> testMyClassFunction
x =
     2
y =
     2

我肯定会称之为错误:)预期的行为是在所有情况下都会出错。