Próbuję dowiedzieć się w czasie wykonywania, czy moja funkcja zastępuje inną funkcję.Sprawdzanie, czy moja funkcja zastępuje inną funkcję
Rozważmy następujący hipotetyczny scenariusz. Wdrażam funkcjonalność o nazwie freqz
, która może istnieć w środowisku MATLAB, jeśli zainstalowano zestaw narzędzi do przetwarzania sygnału. Jeśli rzeczywiście istnieje już jako część zestawu narzędzi, chcę go nazwać w moim własnym i zwrócić jego wynik. Jeśli nie istnieje, chciałbym, aby moja własna funkcja wykonywała własne przetwarzanie.
Oto pseudokod próbka
function foo(args)
if overrides_another_function(foo)
func = find_overriden_function(foo);
result = func(args);
else
result = my_own_processing(args);
return result;
W tym przypadku, gdy ktoś dzwoni foo
, dostaną wersję oni spodziewać, i polegać na własnej implementacji jeśli foo
jest niedostępne z zewnątrz. Czy MATLAB jest w stanie zrobić coś takiego?
Co próbowałem:
- Wywołanie
exist
zasięgufoo
zawsze zwraca2
(funkcja istnieje), ponieważ funkcja jest uważana oświadczył raz jesteśmy wewnątrz niej po raz pierwszy. - Uruchamianie
exist
spoza funkcji w m-pliku jest niepoprawna składnia MATLAB. - Nie znalazłem sposobu na wylistowanie wszystkich funkcji o podanej nazwie. Jeśli uda się to osiągnąć, dotarłoby to do mnie w połowie drogi (przynajmniej wiedziałbym o istnieniu, ale nadal potrzebowałbym dowiedzieć się, jak uzyskać dostęp do zastąpionej funkcji).
można utworzyć podfoldery w obszarze roboczym zawierające "swoje" funkcji. Na początku powinny one być nieznane twojej głównej funkcji, abyś mógł sprawdzić, czy istnieje oryginalna funkcja ('co' itp.) - jeśli wynik jest pusty, możesz użyć' addpath', aby dodać folder z twoją niestandardową funkcją. Istnieją prawdopodobnie bardziej eleganckie sposoby programowania obiektowego. Ale nie jestem tego obeznany. – thewaywewalk
Czy któreś z podanych tutaj rozwiązań działa prawidłowo? – Divakar