だから私はこのようなスーパークラスから継承するクラスを持っていhandle
ます:
classdef testClass < handle
properties(Access = private)
handles_gui;
end
methods(Access = public)
function obj = testClass
% Preferably like to get inputname here
obj.handles_gui = obj.init_gui();
end
function callback_test(obj,hObject,eventdata)
disp(inputname(1));
end
end
methods(Access = private)
function handles_gui = init_gui(obj)
handles_gui.figure = figure( ...
'Tag', 'figure', ...
'Units', 'characters', ...
'Position', [50 35 167 25]);
handles_gui.button_left = uicontrol( ...
'Parent', handles_gui.figure, ...
'Units', 'characters', ...
'Position', [41 1.2 8 1.8], ...
'String', 'Test', ...
'Callback', @(hObject,eventdata) callback_test(obj,hObject,eventdata));
end
end
end
できればコンストラクターでオブジェクトのワークスペース名を取得したいと思います。オブジェクトの作成後まで名前が割り当てられるかどうかわからないため、これが可能かどうかはわかりません。その場合は、コールバックを介して取得したいと思います。obj
GUI はありますが、ハンドルを適切に渡すobj
には、init_gui
関数を渡してコールバックを定義する必要があります。これは、ボタンが押されたときにinputname
が呼び出されたときに を返すことを意味します。これは、コールバック定義で定義されているためです。しかし、端末から呼び出すと、適切な変数名が返されます (結果は理にかなっていますが、それは私が望むものではありません)。以下に例を示します。callback_test
'obj'
callback_test
EDU>> test = testClass;
obj (this was called by clicking on the button)
EDU>> test.callback_test
test
EDU>>
したがって、私の質問は、できればコンストラクターで変数名を取得するにはどうすればよいですか。そうでない場合は、ターミナルを使用せずにコールバックを介して取得するにはどうすればよいですか。