2016-05-17 6 views
-1
classdef hello < handle 
     methods 
      function first(obj) 
       a=4; 
       function second(obj) 
        a 
       end 
      end 
     end 
end 

私は関数 "obj.second"を呼び出すことができます。クラスでネストされた関数を呼び出す

>> hello_obj=hello; 
>> hello_obj.first 
>> hello_obj.second 
No appropriate method, property, or field second for class hello. 

>> hello_obj.first.second 
Attempt to reference field of non-structure array. 

>> hello_obj.first.hello_obj.second 
Attempt to reference field of non-structure array. 

+0

これは不可能ですが、なぜこれを行う必要があると思いますか? – Daniel

+0

ネストされた関数が親関数のワークスペースにアクセスできるという事実を利用したいと思いました(私は "a"をプロパティにしたくありません)。 –

+0

'second'を呼び出そうとすると、' a'は存在しなくなりました。私は財産が最高の解決策だと思いますが、財産を使わない理由を説明するかもしれません。これにより、より良い解決策につながる可能性があります。 – Daniel

答えて

1

を保存するときに、それをスキップするTransientプロパティaを使用していただきありがとうございます:ここで

は、私が試したものですTransistentを適用できない場合は、saveobj and loadobjのオーバーロードを使用することをお勧めします。

+0

どうすれば使えますか?ごめんなさい。 classdef helloプロパティa = 4終了プロパティ(Transient = true)b = 23終了終了>> hello_obj = hello; >> save( 'hello_obj')hello_obj.matには、両方のプロパティを含むオブジェクトが含まれています。 –

+0

@Michaël:いいえ、 'b'をマットファイルに保存しません。コンストラクタを使って再初期化し、23に設定します。' hello_obj = hello; hello_obj.a = 5; hello_obj.b = 24; save( 'hello_obj'); クリアhello_obj; load( 'hello_obj') ' – Daniel

+0

ありがとうございました!実際、hello_obj.bを空の変数として保存することは嫌です。 –

関連する問題