#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