- KISS: don't make this more complex than it needs to be: defining it as its own function name works perfectly. What is wrong with that?
- makes it clear that the functionality is different (and it is different, therefore it deserves its own name),
- makes it clear to everyone that any instances use that special functionality and cannot be replaced by the inbuilt,
- makes it trivial for any future user to search for that function on the interweb and actually find relevant information (even if they don't know what it is),
- better "branding" for you: distinctive names and effective code will be remembered and associated with you... whereas awkward hacks that don't work properly will also be associated with you.
- allows the user to use both functions!
- any undocumented behavior is hard to replicate. We have no way to know what special cases or overloading any compiled function might have and that might be used by TMW in their own code.
How to shadow the built-in find function
12 views (last 30 days)
A while ago I have written a FEX submission that extends the capabilities of find to also work for 3D and up: findND (e.g. a syntax like [x,y,z,val]=findND(A)).
I would like to be able to shadow the built-in function, so I have the option of simply using [x,y,z,val]=find(A) in my code. My function would then use the code from this previous question to get a handle to the built-in function, so my function catches the call to find and does its thing if it needs to. Based on this question, I would have thought that it would be relatively easy to do this: just ignore the warning.
However, when I try this, it doesn't work: Matlab still calls the built-in function. list = which('find', '-all') shows my function as the first entry (for R2017b and R2012b).
It makes sense that Matlab would use the built-in, as that is the function precedence order, but in that case I don't understand why which would think that the local function would take precedence.
Is there a way to do this (preferably without requiring the end-user to jump through many hoops), or should I give up and just use my function under its own name?
Stephen23 on 5 Mar 2018
Edited: Stephen23 on 5 Mar 2018
I think it would be best to use a different name: