2013-07-18 4 views
0

Так что для класса я хотел бы иметь свойство, которое устанавливает функцию, возвращает некоторое значение, чтобы указать, удалось ли ему установить значение.Возвращаемое значение из функции set

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 

Так что я бы кучу штриховых объектов, и я хотел бы передать их Foo, пока он не принимает одно из них. Я знаю, что могу сделать это за пределами класса, но я бы хотел, чтобы все проверки данных происходили внутри класса.

Я столкнулся с попыткой получить функцию set, чтобы вернуть другое значение, но ничего не сработало. Это возможно?

Если бы не моим обходным путем было бы добавить свойство, единственная цель которого - сообщить, был ли последний набор успешным или нет, и проверьте, чтобы после каждого вызова. Итак, если его невозможно, у кого-нибудь еще есть хороший способ обхода этой недостающей функции?

Edit: В ответ на первый ответ

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

В тестировании это не работает. Не понял ли я ваш ответ?

+0

ты устал установка 'Foo' как класс ручки' classdef Foo Shai

+0

Да, никакого влияния на функции сеттера – csleys

ответ

1

Вам нужно создать подкласс hgsetget для того, чтобы иметь возможность use the get/set interface:

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 
+0

Мне нужно иметь возможность проверить программно, если это удастся. См. Редактирование вопроса. – csleys

+0

@csleys После того, как вы установили свойство, запросите его и сравните 'get (myobj, 'A') == 1'. Или вы хотите уведомить слушателей о событиях? – Oleg

+0

Я расширил свой пример. Я хочу передать объект другому объекту и выполнить проверку данных и сказать, приемлемый ли передаваемый объект через логический возврат или что-то еще. – csleys