Matlab 将匿名函数传递给方法

Matlab 将匿名函数传递给方法,matlab,class,oop,global-variables,anonymous-function,Matlab,Class,Oop,Global Variables,Anonymous Function,testcalss.m: classdef testclass properties(Access = public) a; F; end methods(Access = public) function this = testclass() if (1 == 1) this.F = eval('@(x)a * x');

testcalss.m

classdef testclass
    properties(Access = public)
        a;
        F;
    end
    methods(Access = public)
        function this = testclass()            
            if (1 == 1)
                this.F = eval('@(x)a * x');
                eval('this.a = 5');
            end
        end
        function Calculate(this)
            a = this.a;
            this.F(1);
        end
    end
end
global solver;
solver = testclass();
solver.Calculate();
test1.m

classdef testclass
    properties(Access = public)
        a;
        F;
    end
    methods(Access = public)
        function this = testclass()            
            if (1 == 1)
                this.F = eval('@(x)a * x');
                eval('this.a = 5');
            end
        end
        function Calculate(this)
            a = this.a;
            this.F(1);
        end
    end
end
global solver;
solver = testclass();
solver.Calculate();
我执行测试,测试完成后,我收到这样的消息:

未定义的函数或变量“a”。 testclass/testclass/@(x)ax中出现错误 testclass/Calculate中出错(第18行) 本条第F(1)款; test1中的错误(第3行)
solver.Calculate()*

这是一个与匿名函数使用的工作区相关的问题。另请参阅。这应该起作用:

 classdef testclass
    properties(Access = public)
        a;
        F;
    end
    methods(Access = public)
        function this = testclass()            
            if (1 == 1)
                this.F = '@(x)a * x';
                this.a = 5;
            end
        end
        function Calculate(this)
            a = this.a;
            f = eval(this.F);
            f(1)
        end
    end
end

基本上,您可以使用eval在本地创建一个新的匿名函数,因为您不能像这样传递带有固定参数(如a)的匿名函数,至少据我所知。

您编写了构造函数吗?你确定
这个
语法在MATLAB上有效吗?是的,这个语法有效。有一个构造函数。您可以这样做:
全局解算器;a=解算器。a;b=解算器。b;c=solver.c
。在此之前,当我创建类时,我编写了一行
全局解算器;解算器=抛物线()。你能把它编辑成你的问题吗?还有,能提供一些可运行的东西吗?@lhcgeneva我修复了我的帖子。请再看看