单元格数组分配结果 returns 到 ans `object` 而不是预期的 object `obj`
Cell array assignment result returns to ans `object` instead of expected object `obj`
我在决定标题应该足够简单和表现力时遇到了麻烦。如果可以简化标题,请继续编辑。
我有一个 Model
class,其中我有一个方法可以将 node.flow.Pipe
object 添加到 Model
的 nodeArray
(这是一个元胞数组)。
classdef Model
properties
nodeArray = {}
end
...
methods
function result = Model()
end
function obj = addNode(obj, node)
size = numel(obj.nodeArray);
obj.nodeArray{size+1} = node;
end
...
end
end
当我创建 Model
object 和 node.flow.Pipe
object 然后使用 Model
的 addNode(node)
方法时,而不是添加object 的一个节点,Matlab 创建一个新的 object ans
。
>> newModel = Model
newModel =
Model with properties:
nodeArray: {}
numberOfNodes: 0
stateVariable: []
numberOfStateVariables: 0
steadyStateEquations: []
numberOfSteadyStateEquations: 0
>> newModel.addNode(node.flow.Pipe)
ans =
Model with properties:
nodeArray: {[1×1 node.flow.Pipe]}
numberOfNodes: 1
>> newModel.nodeArray
ans =
0×0 empty cell array
我做错了什么?
默认情况下,MATLAB 中的所有 class 都是 value classes 并且在您执行赋值时(按值)被复制。为了访问 classes my reference,您需要继承 MATLAB 的内置 handle
class。
classdef Model < handle
中对句柄和值 class 之间的区别进行了广泛的描述
我在决定标题应该足够简单和表现力时遇到了麻烦。如果可以简化标题,请继续编辑。
我有一个 Model
class,其中我有一个方法可以将 node.flow.Pipe
object 添加到 Model
的 nodeArray
(这是一个元胞数组)。
classdef Model
properties
nodeArray = {}
end
...
methods
function result = Model()
end
function obj = addNode(obj, node)
size = numel(obj.nodeArray);
obj.nodeArray{size+1} = node;
end
...
end
end
当我创建 Model
object 和 node.flow.Pipe
object 然后使用 Model
的 addNode(node)
方法时,而不是添加object 的一个节点,Matlab 创建一个新的 object ans
。
>> newModel = Model
newModel =
Model with properties:
nodeArray: {}
numberOfNodes: 0
stateVariable: []
numberOfStateVariables: 0
steadyStateEquations: []
numberOfSteadyStateEquations: 0
>> newModel.addNode(node.flow.Pipe)
ans =
Model with properties:
nodeArray: {[1×1 node.flow.Pipe]}
numberOfNodes: 1
>> newModel.nodeArray
ans =
0×0 empty cell array
我做错了什么?
默认情况下,MATLAB 中的所有 class 都是 value classes 并且在您执行赋值时(按值)被复制。为了访问 classes my reference,您需要继承 MATLAB 的内置 handle
class。
classdef Model < handle
中对句柄和值 class 之间的区别进行了广泛的描述