matlab 预设变量大小,matlab - 我如何默认Matlab实例的属性,其大小基于在构造实例时设置的实例变量? - SO中文参考 - www.soinside.com...

classdef phase < handle

properties

nVars double ;

boundaries boundaries ;

end

methods

function obj = phase(nVars)

%Some constructor method

obj.nVars = nVars;

obj.boundaries = boundaries(obj);

end

end

end

classdef boundaries

properties

parent phase

upper double ;

lower double ;

end

methods

function obj = boundaries( parent )

% Assign the parent handle

obj.parent = parent ;

% Initialise default values for the properties

obj.upper = Inf * ones([1 parent.nVars]);

obj.lower = -obj.upper ;

end

end

end

此初始化正确:>> a = phase(5)

a =

phase with properties:

nVars: 5

boundaries: [1x1 boundaries]

>> a.boundaries

ans =

boundaries with properties:

parent: [1x1 phase]

upper: [Inf Inf Inf Inf Inf]

lower: [-Inf -Inf -Inf -Inf -Inf]

classdef语法允许在属性中方便地定义默认值,以限制必须在构造函数中完成的编码工作(自动检查输入类型和各种输入检查)。

但是,对于在属性块中定义的每个默认值,MATLAB都会在对象的构造函数中添加自动生成的代码。一旦最终创建并初始化了对象,如果直接在属性块或构造函数中分配了属性值,它将产生[无差异]。对于您的情况,要添加到构造函数中的代码非常琐碎,以至于不值得花很多时间来尝试找到可以在属性块中使用的语法。此外,在您的情况下,这总是会因为另一个问题而失败:通过引用传递。

[当您尝试为boundaries类中的父对象分配一个句柄时,您只是在发送初始阶段对象的

副本。该副本将位于boundaries对象中,但与实际的phase父对象没有关联。为了能够通过引用传递父对象,您需要将handle传递给该父对象,为此,您需要将父类定义为handle。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值