定数プロパティは、他の多くのOOP言語と同様に、Matlabの静的プロパティ(インスタンスではなくクラスに属します)です。そしてそれらにアクセスする自然な方法はMatlab documentationのようにClassName.PropName
です。Matlabのスーパークラスからオブジェクトのクラスを取得
しかし、私はこのようなシナリオでは、スーパークラスからClassName.PropName
を行うための方法を見つけることができませんでした:そう
classdef (Abstract) Superclass < handle
properties(Dependent)
dependentProperty
end
properties (Abstract, Constant)
constantProperty
end
methods
function result = get.dependentProperty(obj)
c = class(obj); % Here I have to get class of obj
result = length(c.constantProperty); % to use here as `ClassName.PropName`
end
end
end
classdef Subclass < Superclass
properties (Constant)
constantProperty = [cellstr('a'); cellstr('b')];
end
end
を次のコマンドの結果はこの:(期待出力)
出力を以下のことを>> subclassInstance = Subclass()
subclassInstance =
Subclass with properties:
constantProperty: {2×1 cell}
dependentProperty: 2
>> subclassInstance.dependentProperty
ans =
2
>>
しかし、代わりに、私はこの:(実際の出力)
を以下の取得します0>> subclassInstance = Subclass()
subclassInstance =
Subclass with properties:
constantProperty: {2×1 cell}
>> subclassInstance.dependentProperty
Struct contents reference from a non-struct array object.
Error in Superclass/get.dependentProperty (line 13)
result = length(c.constantProperty);
>>
c = metaclass(obj)
「 クラス 'meta.class'に対して、適切なメソッド、プロパティ、またはフィールド 'constantProperty'がありません。
質問:ClassName.PropName
のような文を書くには、スーパークラスからオブジェクトのクラスを取得する方法はありますか?
EDIT:
私はこのようなオブジェクト参照から到達することができます知っている:
function result = get.dependentProperty(obj)
result = length(obj.constantProperty);
end
しかし、それはconstantProperty
はインスタンスプロパティだと思うし、読者になり、これは私が欲しいものではありません。これはMatlabには書かれていませんが、ドキュメントにはClassName.PropName
と書かれていますが、これは方法が必要であると私に思います。
私はオブジェクトから到達できることを知っています。しかし、Matlabのドキュメントは私がクラス参照から到達できることを教えてくれます。さらに、オブジェクトからの到達は醜いので、 'constantProperty'はインスタンスプロパティであると読者に考えさせる。また、Javaではこれは 'this.getClass()'によって可能であり、それは方法が必要であると私に思い出させます。 – ferit
私は自分の答えを更新しました。うまくいけば、これは物事をより良く説明するのに役立ちますtl; dr:そこには道がありますが、行く道ではありません。オブジェクト、ルークを使用してください! –
https://www.mathworks.com/help/matlab/matlab_oop/matlab-vs-other-oo-languages.html「静的プロパティはサポートされていません。永続変数を参照してください。** Java static finalまたはC++静的constプロパティ、定数プロパティを使用する。**定数値を持つプロパティを参照してください。しかし、はい 'findobj'メソッドは、より醜い方法です、私はオブジェクト参照を使用することをお勧めします。 – ferit