假设有一个最简单的matlab struct
,其中包含多个变量和函数处理程序。我需要将此函数处理程序绑定到其他结构的字段,以便处理程序能够更改这些变量。
这样的事情:
function newStruct = createStruct()
newStruct.input = unifrnd(-1, 1, [9 9]);
newStruct.kernel = unifrnd(-1, 1, [7 7]);
newStruct.output = zeros(3, 3);
function f()
newStruct.output = conv2(newStruct.input, newStruct.kernel, 'valid');
end
newStruct.fnc = @f;
end
strct = createStruct();
strct.fnc();
它没有用,但是可以实现吗?
答案 0 :(得分:2)
你似乎要做的是尝试使用Matlab以面向对象的方式工作。最新版本的Matlab接受特殊语法来声明类。例如,您的代码将被重写(代码必须位于与该类名称相同的文件中,即MyClass.m
):
classdef MyClass < handle
properties
input;
kernel;
output;
end;
methods
function obj = MyClass()
input = unifrnd(-1, 1, [9 9]);
kernel = unifrnd(-1, 1, [7 7]);
output = zeros(3, 3);
end
function f(obj)
obj.output = conv2(obj.input, obj.kernel, 'valid');
end
end;
end;
然后您可以实例化和修改您的对象,如:
my_obj = MyClass();
my_obj.f();
disp my_obj.output;
此处有更多详情:http://www.mathworks.com/help/matlab/object-oriented-programming.html
答案 1 :(得分:1)
与@CST-Link相同,使用Output
关键字自动更新Dependent
:
classdef MyClass < handle
properties
Input = unifrnd(-1, 1, [9 9]);
Kernel = unifrnd(-1, 1, [7 7]);
end
properties (Dependent)
Output;
end
methods
function [output] = get.Output(this)
output = conv2(this.Input, this.Kernel, 'valid');
end
end
end
可以这样使用:
obj = MyClass();
obj.Output; % No need to call `f` before to get `Output` value