2011-09-13 13 views
2

MATLABハンドルは、一度に同じソースから複数の通知に応答しないようです。残念ながら、これは私の大きな問題です。ここで私が話しているかの例です:MATLABのネストされたイベント通知?

classdef testClass < handle 
    events 
     testevent 
    end 

    methods 
     function obj = testClass 
      obj.addlistener('testevent', @obj.respond); 
     end 
     function raise(obj) 
      obj.notify('testevent'); 
     end 
     function respond(obj, varargin) 
      fprintf('Responded!\n'); 
      obj.raise(); 
     end 
    end 

end 

私はコード

c = testClass; 
c.raise(); 

を実行すると、結果が

Responded! 

あるしかし、私は実際にも、再帰が仕事をしたいです明らかにこの単純な例では、無限に繰り返されます。この現象を起こす方法はありますか?

答えて

3

リスナーハンドルのRecursiveプロパティをtrueに設定することで、リスナーを再帰的にすることができます。 Listener handle properties are in the event.listener help page。ハンドルを取得するには、出力引数をobj.addlistenerに指定するだけです。ここで

は、私はそれを動作させるために使用するコードです:

classdef testClass < handle 
    events 
     testevent 
    end 

    methods 
     function obj = testClass 
      lh = obj.addlistener('testevent', @obj.respond); 
      lh.Recursive = true; 
     end 
     function raise(obj) 
      notify(obj,'testevent'); 
     end 
     function respond(obj, varargin) 
      fprintf('Responded!\n'); 
      obj.raise(); 
     end 
    end 
end 

はまた、500回の通話のデフォルトの再帰の制限があることに注意してください、そう単純にコードが無限に再発します。変更するにはset(0, 'RecursionLimit', N)を使用してください。私はN=infの設定は悪い考えだと思うだろう。

+0

恐ろしい!ありがとう、それは私が必要とするものです! – rlbond

+0

あなたは私の一日を作った! – CitizenInsane

関連する問題