Matlab 将匿名函数传递给方法
testcalss.m: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');
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我修复了我的帖子。请再看看