我正在调用一个函数来更改类的构造函数内的参数,但是,我不能更改这些值。这是bug还是故意的?
在下面的例子中,我正在调用函数";calculateCalculatedProperties(("内部构造函数"calculateCalculatedProperties(("呼叫";速度((;以及";长度((;函数,用于设置速度和长度属性的新值。但是,在构造函数(对象实例(的最终产品中,属性是不变的。
classdef piping
%PIPING Summary of this class goes here
% Detailed explanation goes here
properties
flowRate
diameter
startLocation location
endLocation location
end
methods
function self = piping(flowRate, diameter, startLocation, endLocation)
self.flowRate = flowRate;
self.diameter = diameter;
self.startLocation = startLocation;
self.endLocation = endLocation;
self.calculateCalculatedProperties();
end
function self = calculateCalculatedProperties(self)
fprintf("hey")
self.Velocity();
self.Length();
end
function self = Velocity(self)
self.velocity = self.flowRate / (pi * self.diameter^2 / 4);
end
function self = Length(self)
self.length = location.calculateDistance(self.startLocation,self.endLocation) ;
fprintf("hey this is lengthhhh")
self.flowRate = 10000000;
end
end
properties % Calculated properties
velocity
length
end
end
这里的问题是您使用的是值类,而不是句柄类。请注意,在您的Velocity方法中,您将返回";"self";,在值类中,这些方法调用返回一个单独的对象,该对象在本代码中被忽略。
也就是说,两种可能的解决方案:
-
捕获值对象的输出并返回最终修改的对象。
function self = piping(flowRate, diameter, startLocation, endLocation) % ... self = self.calculateCalculatedProperties(); end function self = calculateCalculatedProperties(self) fprintf("hey") self = self.Velocity(); self = self.Length(); end
-
使用句柄类来创建可变对象。
classdef piping < handle % ... end
有关详细信息,请参阅句柄类和值类的比较。