Manipulating an anonymous function

I have a handle class myClass which has a property myFunc that is a function handle which I define with an anonymous function, e.g.
myClass.myFunc = @(x) 2*x
Is it possible to use myFunc to redefine itself? I tried
myClass.myFunc = @(x) -myClass.myFunc(x)
but trying to evaluate this led to a max recursion error. My function is defined inside of a class method using a local variable like:
myClass.myFunc = @(x) localVar*x
Otherwise, I would consider using func2str, but that doesn't help because it produces the expression involving localVar which is no longer defined. Right now, I am using
myClass.myOtherFunc = @(x) -myClass.myFunc(x)
but I'd prefer not to have to create a separate property just for this.

 Respuesta aceptada

Walter Roberson
Walter Roberson el 17 de En. de 2014
tmp = myClass.myFunc;
myClass.myFunc = @(x) ~tmp(x);

3 comentarios

Will
Will el 17 de En. de 2014
I get "Undefined function 'not' for input arguments of type 'function_handle'." (and the same thing but with "uminus" instead of "not" if I switch the ~ with -).
Walter Roberson
Walter Roberson el 17 de En. de 2014
Are you sure you have the (x) after tmp ? Could you show the exact two lines of code that you use?
Will
Will el 21 de En. de 2014
Sorry, your solution works for me now. I tried it before and got the error I mentioned, but maybe I had a typo somewhere.

Iniciar sesión para comentar.

Más respuestas (1)

per isakson
per isakson el 17 de En. de 2014
Editada: per isakson el 17 de En. de 2014
I don't understand what you want to achieve, but
>> myc = my_class();
>> x = myc.foo(5);
>> x
x =
-10
where
classdef my_class
properties
foo1
end
methods
function this = my_class( )
this.foo1 = @(x) 2*x;
this.foo1 = @(x) -this.foo1(x);
end
function out = foo( this, val )
out = this.foo1(val);
end
end
end

2 comentarios

Will
Will el 21 de En. de 2014
That is basically what I was trying to do. If you change the first line of your class definition from
classdef my_class
to
classdef my_class < handle
you will get a max recursion error when you run myc.foo(5).
per isakson
per isakson el 22 de En. de 2014
My mistake. However, this looks like a bug to me. Did you report to tech-support?

Iniciar sesión para comentar.

Categorías

Más información sobre Function Handles en Centro de ayuda y File Exchange.

Productos

Preguntada:

el 16 de En. de 2014

Comentada:

el 22 de En. de 2014

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by