通过名称获取Class属性

时间:2018-09-11 14:01:14

标签: matlab reflection

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

classdef ClassA < handle        
    properties
        a
    end        
end

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

是否有类似GetVar('a')的东西?

1 个答案:

答案 0 :(得分:4)

当结构或自定义对象<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_selected="true" android:color="@color/Primary" /> <item android:state_focused="false" android:color="@color/IconsColor" /> <item android:state_selected="false" android:color="@color/IconsColor" /> <item android:state_focused="true" android:color="@color/Primary" /> <item android:state_pressed="true" android:color="@color/white" /> <item android:color="@color/tabsScrollColor" /> </selector> 的名称由字符串obj(我知道)给出时,有四种访问结构或自定义对象的字段的方法。给定str,以下各项均等效于obj.a

  1. 使用eval (不推荐!)

    str='a'
  2. 使用subsref(或subsasgn进行分配):

    eval(['obj.',str])
    
  3. 使用getfield

    S = substruct('.',str);
    subsref(obj,S)
    
  4. 使用functional form of the dot operator

    getfield(obj,str)
    

后者当然是首选。

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