【问题标题】:MatLab: how to define (not constant) properties that depend on other properties?MatLab:如何定义依赖于其他属性的(非常量)属性?
【发布时间】:2017-02-08 23:47:36
【问题描述】:

在下面的课程中

classdef ClassCar
  properties (Constant)
    % Car phyisical properties
    m = 1630;         % [kg]
    R_rim = 14*.0254; % [m]
    e_tire = .175*.55; % [m]
    R_e = ClassCar.R_rim + ClassCar.e_tire;                   % <= HERE

    % Car transmission properties
    gearRatios = [3.154 1.925 1.281 .951 .756];
    finalDrive = 3.05; %Rapport de differentiel
    overallRatios = ClassCar.gearRatios * ClassCar.finalDrive;% <= HERE
  end
end

我想拥有依赖于其他属性的组合属性(作为快捷方式)。 IE。从实例化对象中检索 (car = ClassCar)

car.R_e

car.overallRatios

问题是 R_e 是 R_rim 和 e_tire 的函数。 使用(常量)属性,它可以工作,但问题是我想要这些属性不是常量,并且简单地删除关键字会导致问题。

然后我尝试在方法的帮助下做到这一点

classdef ClassCar
  properties
    % Car phyisical properties
    m = 1630;         % [kg]
    R_rim = 14*.0254; % [m]
    e_tire = .175*.55; % [m]

    % Car transmission properties
    gearRatios = [3.154 1.925 1.281 .951 .756];
    finalDrive = 3.05; %Rapport de differentiel
  end
  methods (Static)
    function value = R_e()
        value = R_rim + e_tire;                       % <= HERE
    end
    function value = overallRatios()
        value = gearRatios * finalDrive;
    end
  end
end 

但即使使用关键字(静态)作为方法,我也会收到 错误消息“未定义的函数或变量 'R_rim'。”我尝试输入 self.R_rim、ClassCar.R_rim,但没有成功。

如何实现?这是最好的方法吗?如果是这样,如何访问对象的属性(比如 self.value)?

谢谢。

【问题讨论】:

    标签: matlab class oop properties


    【解决方案1】:

    您正在寻找的是dependent properties。这些被列为属性,但有自己的获取(或设置)值的方法:

    classdef ClassCar
       properties
          R_Rim = 14*.0254;
          e_tire = .175*.55;
       end
       properties (Dependent)
          R_e
       end
       methods
          function val = get.R_e(obj)
              val = obj.R_rim + obj.e_tire;
          end
       end
    
    end
    

    【讨论】:

    • 非常感谢先生!
    • 而且,比这更好的是,属性 R_rim 和 e_tire 实际上不必是(常量),这是它最好的部分! (我已经编辑了你的答案)
    【解决方案2】:

    好的,我找到了答案:需要编写适当的专用函数。 我不知道方法的语法...

    查看工作代码:

    classdef ClassCar
      properties
        % Car phyisical properties
        m = 1630;         % [kg]
        R_rim = 14*.0254; % [m]
        e_tire = .175*.55; % [m]
        % Car transmission properties
        gearRatios = [3.154 1.925 1.281 .951 .756];
        finalDrive = 3.05; %Rapport de differentiel
      end
      methods
        function val = R_e(obj)
            val  = obj.R_rim + obj.e_tire;
        end
        function val = overallRatios(obj)
            val = obj.gearRatios * obj.finalDrive;
        end
      end
    end
    

    【讨论】:

      猜你喜欢
      • 2011-09-09
      • 1970-01-01
      • 1970-01-01
      • 2017-12-16
      • 2016-07-08
      • 1970-01-01
      • 2010-11-15
      • 2019-12-17
      • 2021-06-22
      相关资源
      最近更新 更多