Я пишу определение класса, которое использует прослушиватели для изменения объекта, когда установлены определенные свойства. Вроде так:В Matlab, какой правильный синтаксис для передачи новых переменных при использовании прослушивателя PreSet
classdef MyObject < handle
properties (SetObservable)
orientation = 'h'; % h = horizontal, v = vertical, o = other
length
width
end
methods
% Constructor
function mo = MyObject(o)
mo.orientation = o;
addlistener(mo, 'orientation', 'PreSet', @mo.changeOrientation);
end
% Change Orientation Listener
function changeOrientation(mo, src, evnt)
celldisp(src);
celldisp(evnt);
% I want a way to access newor here
if mo.orientation == 'h' && newor == 'o'
tempw = mo.width
mo.width = mo.length
mo.length = tempw;
end
end
% Setter
function set.orientation(mo, newor)
mo.orientation = newor;
end
end
end
Я хочу иметь возможность использовать переменный новичок, когда устанавливаю ориентацию. Как передать новую переменную ориентации в метод changeOrientation?
Я хочу, чтобы избежать перемещения содержимого changeOrientation
в метод set.orientation
, потому что Matlab жалуется на свойства (длина и ширина), которые потенциально не инициализируются.
EDIT длина НЕ зависит от ориентации. Мне просто нужно поменять длину и ширину при изменении ориентации. В других случаях пользователь должен иметь возможность устанавливать длину или ширину в любое положительное значение.
Это то, что я хотел бы сделать. Однако у меня есть другое свойство, длина, которое изменится при изменении ориентации. И когда я пытаюсь установить 'mo.length' в методе' set.orientation', Matlab сердится на меня и говорит, чтобы я этого не делал. – toshiomagic
@toshiomagic Да MATLAB жалуется на это. Это связано с тем, что во время построения объекта или загрузки из файла не гарантируется, что значения 'length' и' orientation' являются допустимыми.Считаете ли вы, что 'length' является динамическим свойством? Можете ли вы обновить свой пост, чтобы включить информацию об этом другом свойстве? – Suever
@toshiomagic Вы также можете настроить функции «обратного вызова», как я уже отмечал выше, что аналогично предыдущей настройке без прослушивателя. – Suever