9

我在路径上的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

它给了我以下错误:

静态方法或构造函数调用不能被索引。不要在对静态方法或构造函数的调用之后加上任何额外的索引或点引用。

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

4

1 回答 1

6

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

1)命令提示符(第一个:好的,第二个:错误)

这是你已经展示的

>> 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)脚本(第一个:错误,第二个:错误)

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)功能(第一个:ok,第二个:ok)

testMyClassFunction.m

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

>> testMyClassFunction
x =
     2
y =
     2

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

于 2012-05-28T07:27:35.923 回答