Sha*_*Man 2 matlab structure object
我问这个问题来测试一个概念.我不是试图在代码中提供解决方案,我只需要建议继续下去的方向.
我想创建一个结构域,它始终是同一结构的其他字段的函数.
我已经能够实现可以修改现有结构并使用新字段更新它的代码.但是,如果不重新初始化代码,这不起作用,这不是理想的.
我需要能够添加另一个结构,为某些字段赋值,然后通过我定义的函数自动更新其余字段.
结构是否是完成此任务的正确方法?我认为不是,但我不确定可以使用什么方法.
我附上了一个非常简单的代码片段来演示这个问题.
module = struct('dim', [ 3 1 0.05], ...
'point', [0 0 0], ...
'shape', cubeshape(module.dim,module.point))
% cubeshape is my function of dim & point
Run Code Online (Sandbox Code Playgroud)
matlab返回错误....
Undefined function or variable 'dim'.
Run Code Online (Sandbox Code Playgroud)
这是有道理的,因为struct()函数尚未关闭,这意味着尚未定义模块结构.
如果我的问题太新手了,请告诉我我可以继续研究,但一些指导意见将不胜感激.
谢谢!
您可以将'shape'字段设置为函数句柄:
module = struct('dim', [3 1 0.05], ...
'point', [0 0 0], ...
'shape', @()cubeshape(module.dim,module.point))
Run Code Online (Sandbox Code Playgroud)
然后通过访问'shape'字段的值
module.shape()
Run Code Online (Sandbox Code Playgroud)
但是,您会发现如果更改module.dim结构中的值,则返回的值module.shape()不会更新.这是因为在实例化时设置了两个函数句柄参数.你可能不想要这个.相反,你可以作为参数传递module.dim和module.point进入你的函数句柄:
module = struct('dim', [3 1 0.05], ...
'point', [0 0 0], ...
'shape', @(dim,point)cubeshape(dim,point))
module.shape(module.dim,module.point)
Run Code Online (Sandbox Code Playgroud)
它不太优雅,但解决了问题,因为它的当前值module.dim和module.point将被使用.
还有许多其他方法可以解决您的问题.最标准的是通过面向对象的方法.然而,有时,这可能就像用大锤拍打苍蝇(有时在Matlab的情况下非常慢的大锤).您可以通过功能和对问题的一些重新思考来完成所需的操作.