MatLab: как определить (не постоянные) свойства, которые зависят от других свойств?

#matlab #class #oop #properties

#matlab #класс #ооп #свойства

Вопрос:

В следующем классе

 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
  

Я хочу иметь составные свойства, которые зависят от других свойств (в качестве ярлыка). Т.е. для извлечения из созданного экземпляра объекта (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 
  

Но даже с ключевым словом (Static) для метода я получаю сообщение об ошибке «Неопределенная функция или переменная ‘R_rim'». Я пытался ввести self.R_rim, ClassCar.R_rim, напрасно.

Как этого добиться? Это лучший способ сделать?Если да, то как получить доступ к свойствам объекта (например, self.value)?

Спасибо.

Ответ №1:

То, что вы ищете, — это зависимые свойства. Они перечислены как свойства, но имеют свои собственные методы для получения (или установки) значений:

 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
  

Комментарии:

1. Большое вам спасибо, сэр!

2. И, что еще лучше, свойства 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