首页 > 解决方案 > 按名称获取 Class 属性

问题描述

是否可以通过名称动态访问类属性?

classdef ClassA < handle        
    properties
        a
    end        
end

obj = ClassA;
obj.GetVar('a') = 10;

有没有类似的东西GetVar('a')

标签: matlabreflection

解决方案


obj当结构或自定义对象的名称由字符串str(我知道)给出时,有 4 种方法可以访问结构或自定义对象的字段。以下都等价于obj.a,给定str='a'

  1. 使用(不推荐!)eval

    eval(['obj.',str])
    
  2. 使用subsref(或subsasgn分配):

    S = substruct('.',str);
    subsref(obj,S)
    
  3. 使用getfield

    getfield(obj,str)
    
  4. 使用点运算符的函数形式

    obj.(str)
    

后者当然是优选的。

subsref并且subsasgn很有趣,因为它们是您可以在类中重载以修改索引行为的方法。该getfield方法的用途非常有限,但在obj.(str)引入语法之前,它曾经是使用动态名称访问字段的唯一合理方法。


推荐阅读