结构域是matlab的功能

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()函数尚未关闭,这意味着尚未定义模块结构.

如果我的问题太新手了,请告诉我我可以继续研究,但一些指导意见将不胜感激.

谢谢!

hor*_*ler 5

您可以将'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.dimmodule.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.dimmodule.point将被使用.

还有许多其他方法可以解决您的问题.最标准的是通过面向对象的方法.然而,有时,这可能就像用大锤拍打苍蝇(有时在Matlab的情况下非常慢的大锤).您可以通过功能和对问题的一些重新思考来完成所需的操作.