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

次のエラーが表示されます。

静的メソッドまたはコンストラクターの呼び出しは、インデックスを作成できません。静的メソッドまたはコンストラクターの呼び出しの後に、追加のインデックスまたはドット参照を付けないでください。

これが最初のケースで機能し、2 番目のケースで機能しないのはなぜですか? 私が理解している限りimport、クラスを ing すると、主に長いパッケージ名なしでクラス名を使用できるようになりました (他の考慮事項の中でも特に)。このエラーの原因となるこれら 2 つの違いは何ですか?また、どうすれば回避できますか?

4

1 に答える 1

6

コマンド ウィンドウで実行している場合、スクリプトから実行している場合、または関数から実行している場合は、動作が異なります。

1) コマンドプロンプト (1回目: OK、2回目: エラー)

これはあなたがすでに示したものです

>> 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 

(2 行目でも同じエラーがスローされます)

3) 機能 (1 番目: OK、2 番目: 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 に答える