1

次のクラスがある場合:

classdef foo
    properties
        bar1
        bar2
        bar3
    end
    properties(Access = private)
        bar4
        bar5
    end
end

次の操作を行います。

myObj = foo();
test = struct(myObj);

testfooプライベート プロパティを含む as フィールドの 5 つのプロパティがすべて含まれます。

test = 

        bar1: NaN
        bar2: NaN
        bar3: NaN
        bar4: NaN
        bar5: NaN

myObjas フィールドのパブリック プロパティのみを持つ構造を作成したいと考えています。

test = 

        bar1: NaN
        bar2: NaN
        bar3: NaN

オブジェクトからパブリック プロパティのみの構造を抽出するにはどうすればよいですか?

4

2 に答える 2

2

より一般的な解決策として (つまり、異なるセットのプロパティを見つけて可視性を取得したい場合)、?演算子またはmetaclass関数のいずれかを使用できます。これにより、クラスに関するすべての情報を記述するオブジェクトが返されます。

myDefinition = ?foo
myProperties = myDefinition.PropertyList
isPublic = strcmp({myProperties.SetAccess}, 'public') & strcmp({myProperties.GetAccess}, 'public')
myPublicProperties = myProperties(isPublic)
myPublicPropertyNames = {myPublicProperties.Name}

結果:

myPublicPropertyNames = 

    'bar1'    'bar2'    'bar3'

どのプロパティが公開されているかがわかったので、この情報を好きな形式に変換できます(@erikcedの回答でカバーされている構造を含む)。

于 2013-05-30T19:54:48.790 に答える