0

そのため、関数を設定するプロパティが値の設定に成功したかどうかを示す値を返すようにしたいクラスが与えられました。

classdef Foo
  properties
    bar;
  end
  methods
    function this = set.bar(this, instanceOfBar)
      if instanceOfBar.x < 5 & instanceOfBar < 10
        this.bar = instanceOfBar;
        return something to tell me that this instance of bar matched my criteria
      else
        return some value to tell me that it did not match
      end
    end
  end
end

classdef bar
  properties
    x;
    y;
  end
end

だから私はたくさんのバーオブジェクトを持っていて、そのうちの1つを受け入れるまでそれらをfooに渡したいと思います。クラス外でこれを実行できることはわかっていますが、すべてのデータ検証をクラス内で実行したいと考えています。

set 関数に別の値を返させようとしていじりましたが、何も機能しませんでした。これは可能ですか?

そうでない場合、私の回避策は、最後のセットが成功したかどうかを報告し、各呼び出しの後にそれを確認することを唯一の目的とするプロパティを追加することです。それで、それが不可能な場合、他の誰かがこの欠落している機能に対する適切な回避策を持っていますか?

編集:最初の回答に応じて

if set(myobject, 'A', 1) == 'Good'
  execute code
else
  do something else

テストでは、これは機能しません。私はあなたの答えを誤解しましたか?

4

1 に答える 1

1

get/set インターフェイスhgsetgetを使用できるようにするには、サブクラス化する必要があります。

classdef foo < hgsetget
    properties
        A
    end
    methods 
        function obj = set.A(obj,val)
        if val == 1
            obj.A = val;
            disp('Good')
        else
            disp('Bad')
        end
        end
    end
end

実際に:

myobj = foo
myobj = 
  foo with properties:
    A: []

set(myobj,'A',1)
Good

get(myobj)
A: 1
于 2013-07-18T21:08:23.577 に答える