首页 > 解决方案 > 获取对象名称作为字符串 MATLAB

问题描述

我想找到一种方法来获取 MATLAB 中对象实例的名称,并在 MATLAB R2019b 中将其返回。

所以在启动器构造函数中定义这样的实例

Properties
    TorqueViewComponent
    SpeedViewComponent
end

methods
    function obj = Launcher()
        TorqueViewComponent = GraphView(args...);
        SpeedViewComponent = GraphView(args...);
    end
end

然后在图形视图对象构造函数中类似于

function obj = GraphView(args...)
    if strcmp(object name, 'TorqueViewComponent')
        do some things;
    elseif strcmp(object name, 'SpeedViewComponent')
        do some other things;
    end
end

本质上,我有多个 GraphView 对象实例,我想根据实例名称绘制不同的数据集。

如果您有任何问题,请告诉我,我可以更详细地解决问题

标签: matlaboop

解决方案


你真的只有两个选择;子类 Graphview 以创建专门的子类,或传递额外的输入参数。可能有一些 hacky 解决方案可以让您以某种方式从调用者工作区获取名称,但这不太可能提高代码的可读性和可维护性。

子类化

例如

classdef TorqueGraphView < GraphView
   methods
      function obj = TorqueGraphView(varargin)
         obj@SuperClass(varargin);
         ...
      end
   end
end

事实上,如果你真的不需要向 TorqueGraphView 传递额外的参数,你可以利用这样一个事实,即你可以对 Inherited Constructor 进行隐式调用

classdef TorqueGraphView < GraphView
    % ... no constructor, only Torque-specific methods here
end

显式输入参数

否则,如果您认为对于如此小的调整来说这太过分了,那么您真的必须传递一个参数来表明这一点。如果您主要关心的是“混乱”,您可以考虑将您的参数打包到一个结构中,这样看起来会更整洁一些。这甚至可以帮助您很好地将特定于对象的参数与通用/选项相关的参数分开,例如

TorqueArgs = struct(                  ...
    'type'        ,   'torque'      , ...
    'initialvalue',   0             , ...
    'ylabel'      ,   'Torque [Nm]' , ...
    'plottitle'   ,   'Torque'        )

GraphOpts = struct (      ...
    'axescolor',   'k'  , ...
    'linewidth',   3,   , ...
    'grid'     ,   'on'   )

TorqueViewComponent = GraphView( TorqueArgs, GraphOpts );

推荐阅读