Matlab 在构造函数中无法更改类的参数



我正在调用一个函数来更改类的构造函数内的参数,但是,我不能更改这些值。这是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";,在值类中,这些方法调用返回一个单独的对象,该对象在本代码中被忽略。

也就是说,两种可能的解决方案:

  1. 捕获值对象的输出并返回最终修改的对象。

    function self = piping(flowRate, diameter, startLocation, endLocation)
    % ...
    self = self.calculateCalculatedProperties();      
    end
    function self = calculateCalculatedProperties(self)
    fprintf("hey")
    self = self.Velocity();
    self = self.Length();
    end
    
  2. 使用句柄类来创建可变对象。

    classdef piping < handle
    % ...
    end
    

有关详细信息,请参阅句柄类和值类的比较。

相关内容

  • 没有找到相关文章

最新更新