2013-08-07 42 views
2

我在问这个问题来测试一个概念。我没有试图在代码中提供解决方案,我只需要建议继续的方向。结构字段是函数matlab

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

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

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

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

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

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

这是有意义的,因为该结构()函数还没有被关闭 这意味着模块结构还没有被定义。

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

谢谢!

回答

5

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

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

,然后通过

module.shape() 

但是访问'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)。你可能能够做你需要的功能和一些重新思考你的问题。

+0

谢谢你的回应。假设我想在结构中添加3个模块,它们都可能具有不同的暗淡值和点值。我每次都必须调用module.shape(module.dim,module.point)吗? – ShadowMan

+0

我不知道你的意思是“在结构中增加3个模块”。你的结构本身被称为“模块”。你的意思是一个结构数组,即'module(1)= struct(...)','module(2)= struct(...)',...?或者你的意思是增加更多的领域? [此视频](http://blogs.mathworks.com/pick/2008/04/22/matlab-basics-array-of-structures-vs-structures-of-arrays/)可以帮助你。 – horchler

+0

对不起,我的术语缺乏。我想在一个结构数组中创建更多的模块结构。即'module(1)= struct(...)','module(2)= struct(...)',我希望每个这些结构的shape字段都对应于'dim'和'point' – ShadowMan