将matlab结构的函数字段与其他结构的字段绑定

时间:2014-06-23 09:10:39

标签: matlab function binding handler

假设有一个最简单的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();

它没有用,但是可以实现吗?

2 个答案:

答案 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