gpt4 book ai didi

oop - MATLAB : Instantiate a class from an empty Instance to a 'Blank' Instance

转载 作者:行者123 更新时间:2023-12-02 02:14:55 26 4
gpt4 key购买 nike

为什么我的 Instantiate 函数没有创建 That 的“空白”实例?

我有以下最小类:

classdef That < handle
properties
This = ''
end
methods
function Self = That(String)
if exist('String','var') == 1
Self.This = String;
end
end
function Self = Instantiate(Self)
if isempty(Self)
Self(1,1) = That;
end
end
end
end

如果我跑

This = That;
disp(size(This)) % 1x1
disp(isempty(This)) % False

一切都很好,我有一个类的“空白”实例

如果我跑

TheOther = That.empty;
disp(size(TheOther)) % 0x0
disp(isempty(TheOther)) % True
TheOther.Instantiate;
disp(size(TheOther)) % 0x0 - Expecting 1x1
disp(isempty(TheOther)) % True - Expecting False

如您所见,运行我的 Instantiate 不起作用,我不明白为什么?它肯定应该用一个非空但空白的实例替换空实例吗?

更新:

SCFrench 的链接指向此 http://www.mathworks.com/help/techdoc/matlab_oop/brd4btr.html在创建空数组标题下,尽管这也不起作用:

function Self = Instantiate(Self)
if isempty(Self)
Blank = That;
Props = properties(Blank)
for idp = 1:length(Props)
Self(1,1).(Props{idp}) = Blank.(Props{idp});
end
end
end

最佳答案

MATLAB 按值传递句柄对象数组(包括 1×1“标量”数组)。句柄值是对对象的引用,可用于更改对象的状态(即其属性),但重要的是,它不是对象本身。如果将一个句柄值数组传递给函数或方法,则该数组的副本实际上会传递给该函数,并且修改副本的维度对原始数组没有影响。事实上,当你调用

TheOther.Instantiate;  

您分配给 Self(1,1)That 实例作为 Instantiate 的输出返回并分配给 回答

This link查看 MATLAB 面向对象设计文档的一部分也可能有所帮助。

关于oop - MATLAB : Instantiate a class from an empty Instance to a 'Blank' Instance,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11103079/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com