2

我问这个问题是为了测试一个概念。我不想在代码中提供解决方案,我只需要关于继续前进的方向的建议。

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

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

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

结构甚至是完成这项任务的正确方法吗?我认为不是,但我不确定可以使用什么方法。

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

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

如果我的问题太新手,请告诉我我可以继续研究,但不胜感激。

谢谢!

4

1 回答 1

5

您可以将该'shape'字段设置为函数句柄

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.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)

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

还有许多其他方法可以解决您的问题。最标准的是通过面向对象的方法。然而,有时,这可能就像用大锤击打苍蝇(在 Matlab 的情况下有时是非常慢的大锤)。您可能能够通过功能和重新思考您的问题来做您需要的事情。

于 2013-08-07T19:11:05.857 回答