我问这个问题来测试一个概念。我不是试图在代码中提供解决方案,我只需要建议继续下去的方向。
我想创建一个结构字段,它始终是同一结构的其他字段的函数。
我已经能够实现可以修改现有结构并使用新字段更新它的代码。但是,如果没有重新初始化代码,这不起作用,这是不理想的。
我需要能够添加另一个结构,为某些字段赋值,然后通过我定义的函数自动更新其余字段。
结构是否是完成此任务的正确方法?我认为不是,但我不确定可以使用哪种方法。
我附上了一个非常简单的代码片段来演示问题。
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()函数尚未关闭 这意味着尚未定义模块结构。
如果我的问题太新手了,请告诉我我可以继续研究,但有些指导意见会受到赞赏。
谢谢!
答案 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.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
的当前值。
还有许多其他方法可以解决您的问题。最标准的是通过object-oriented approaches。然而,有时候,这可能就像用大锤拍打苍蝇(在Matlab的情况下a very slow sledgehammer sometimes)。您可以通过功能和对问题的一些重新思考来完成所需的工作。