【发布时间】:2013-08-02 18:47:15
【问题描述】:
所以我有一个继承自 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
我希望最好在构造函数中获取对象的工作区名称。不确定这是否可行,因为在创建对象之前我不确定是否分配了名称。如果是这样的话,那么我想通过回调来获取它。我有一个 gui,但为了正确传递 obj 句柄,我必须通过在 init_gui 函数中传递 obj 来定义回调。这意味着当按下按钮时为callback_test 调用inputname 时,它返回'obj',因为它是在回调定义中定义的。但是,如果我通过终端调用callback_test,它会返回正确的变量名(结果是有意义的,但这不是我想要的)。示例如下:
EDU>> test = testClass;
obj (this was called by clicking on the button)
EDU>> test.callback_test
test
EDU>>
所以我的问题是:如何获取变量名,最好在构造函数中,如果没有,那么如何通过回调获取它,而不必使用终端。
【问题讨论】:
-
刚想出一个主意:你可以使用
whos,然后找到你感兴趣的类类型的所有变量名。然后你可以assignin进入调用者工作区并比较每个带有obj的变量使用eq来查找正确的名称。稍后我会看看这是否有效。 -
好吧,我的评论是错误的,因为您不能在嵌套函数中使用
assignin,所以现在我回到第一条。 -
我在这里展示如何检索赋值变量名称:stackoverflow.com/questions/17554012/…。
-
@OlegKomarov,今晚晚些时候我会检查一下。谢谢。
-
这是一个有趣的 Matlab 编程难题。但是,如果您需要对象本身内的对象的工作区名称,那么您可能有一个损坏的体系结构。这不应该是必需的,并且可能会阻止用户(即将来的您)以灵活的方式使用此类。
标签: matlab