我在路径中的包文件夹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
一个类主要允许一个人使用没有长包名的类名(以及其他考虑因素)。这两个导致此错误的区别是什么,我该如何解决?
答案 0 :(得分:5)
这对你来说更奇怪:如果你在命令窗口,脚本或函数中运行,行为会有所不同!
这是你已经展示过的
>> 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.
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
(第二行也会抛出相同的错误)
function testMyClassFunction()
x = myPack.myClass(2).prop
import myPack.myClass; y = myClass(2).prop
end
和
>> testMyClassFunction
x =
2
y =
2
我肯定会称之为错误:)预期的行为是在所有情况下都会出错。