【发布时间】:2020-11-29 19:59:47
【问题描述】:
我正在尝试从嵌套函数中修改结构数组,其中嵌套函数通过函数句柄“返回”。据我所知,您不能从“外部”函数修改结构体数组,因为 MATLAB 通过值而不是引用传递参数。但是,您应该能够在嵌套函数中执行此操作,因为嵌套函数可以访问“父”范围。但是,当我使用函数句柄“寻址”该函数时,它不起作用。
代码如下:
function object = objectReader()
object.counter = 0;
object.getData = @GetData;
function data = GetData(input)
object.counter = object.counter+1;
data = input*1.23456789;
end
end
根据我的发现,可能是在制作函数句柄时,它还制作了“当前”范围的副本,因此该函数不再存在于“隔离环境”中。
所以问题是,如何在嵌套函数中修改结构数组,同时保持外部接口?通过外部界面,我的意思是你可以这样做:
object = objectReader();
data = object.getData(1);
每次调用 object.getData() 函数时,object.counter 都会递增。
【问题讨论】:
-
这很奇怪而且很复杂。您正在尝试使用方法创建对象。为此使用
classdef。闭包不是为此而设计的。
标签: matlab nested-function matlab-struct