结构域是matlab的功能

时间:2013-08-07 18:05:40

标签: matlab object structure

我问这个问题来测试一个概念。我不是试图在代码中提供解决方案,我只需要建议继续下去的方向。

我想创建一个结构字段,它始终是同一结构的其他字段的函数。

我已经能够实现可以修改现有结构并使用新字段更新它的代码。但是,如果没有重新初始化代码,这不起作用,这是不理想的。

我需要能够添加另一个结构,为某些字段赋值,然后通过我定义的函数自动更新其余字段。

结构是否是完成此任务的正确方法?我认为不是,但我不确定可以使用哪种方法。

我附上了一个非常简单的代码片段来演示问题。

    module = struct('dim', [ 3 1 0.05], ...
                    'point', [0 0 0],   ...
                     'shape', cubeshape(module.dim,module.point))
                              % cubeshape is my function of dim & point

matlab返回错误....

    Undefined function or variable 'dim'.

这是有道理的,因为struct()函数尚未关闭 这意味着尚未定义模块结构。

如果我的问题太新手了,请告诉我我可以继续研究,但有些指导意见会受到赞赏。

谢谢!

1 个答案:

答案 0 :(得分:5)

您可以将'shape'字段设置为function handle

module = struct('dim', [3 1 0.05], ...
                'point', [0 0 0], ...
                'shape', @()cubeshape(module.dim,module.point))

然后通过

访问'shape'字段的值
module.shape()

但是,您会发现如果更改结构中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)

它不太优雅,但解决了问题,因为将使用module.dimmodule.point的当前值。

还有许多其他方法可以解决您的问题。最标准的是通过object-oriented approaches。然而,有时候,这可能就像用大锤拍打苍蝇(在Matlab的情况下a very slow sledgehammer sometimes)。您可以通过功能和对问题的一些重新思考来完成所需的工作。