Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

New MATLAB version overrides my function with class method. Can I still call my function?

I had a function in a file harmonic.m in my matlab path with prototype:

function D = harmonic(A,B,C)

where, importantly, A is expected to be a matrix of type double.

In version r2014a, apparently MATLAB has created a new builtin class method double.harmonic. Thus when I call my function I get an error inside the wrong harmonic. It doesn't help that my harmonic is closer in the path list (which harmonic reveals my path) because my first input is A and harmonic(A,B,C) seems to be equivalent to A.harmonic(B,C).

Is there any way to call my function directly? To ignore this double.harmonic function? I know I can create a function handle from the path, but that's nasty. I'm looking for a more elegant solution or workaround. The most obvious being change my function's name, but then I'll feel bullied : - (.

like image 551
Alec Jacobson Avatar asked May 02 '14 19:05

Alec Jacobson


1 Answers

Put your version of harmonic into a folder @double, and make sure that your folder @double is above \toolbox\symbolic\symbolic\@double on the path (this new double.harmonic is from Symbolic Toolbox).

That will force your function to become a method of double i.e. it will be double.harmonic, rather than a generic function harmonic. When deciding which thing to dispatch to, MATLAB will consider methods first, then generic functions later. Since your double.harmonic and the other one are both methods, and yours is ahead on the path, yours will win. BAM - eat that, MATLAB!

like image 53
Sam Roberts Avatar answered Nov 03 '22 21:11

Sam Roberts