2015-10-23 15 views
8

Załóżmy, że mam trochę kodu MATLAB, który używa niektórych funkcji. Nie chcę definiować funkcji w tym samym pliku, co kod, który używa funkcji.Jak ustawić kod Matlaba?

Z drugiej strony, rozwiązanie tworzenia pliku m dla każdej funkcji również nie jest dobre dla mnie, ponieważ nie chcę wielu plików. To, czego chcę, to coś w rodzaju pliku utils, który przechowuje te funkcje, z których mogę importować funkcje takie jak np. W pythonie.

Co byś polecił?

+0

Istnieje Matlab funkcji przeglądarki, która pokazuje niestety tylko Matlab funkcje seryjnych. Może mieć pewne nieudokumentowane funkcje Matlab, które mogą umożliwić korzystanie z przeglądarki funkcji dla funkcji dostarczanych przez użytkownika. – JaBe

+0

Oto [ściśle powiązane pytanie] (http://stackoverflow.com/q/3569933/52738). Możesz tam znaleźć pomocne pomysły. Wygląda na to, że możesz chcieć czegoś podobnego w odpowiedzi Jonasa (trasa zorientowana obiektowo). – gnovice

Odpowiedz

12

Najprawdopodobniej użyjesz package, który jest trochę jak moduł python, ponieważ jest to folder, który może pomieścić wiele plików. Robisz to przez umieszczenie + na początku nazwy folderu, na przykład +mypackage. Następnie można uzyskać dostęp do funkcji i klas w folderze przy użyciu notacji podobnej do Pythona, bez tego, że zanieczyszcza ona globalną listę funkcji (tylko pakiet jest dodawany do globalnej listy, a nie do każdej funkcji w nim). Można także importować poszczególne funkcje lub klasy. Jednak zawsze musisz korzystać z pełnej ścieżki funkcji, nie ma czegoś takiego jak ścieżki względne, takie jak w Pythonie.

Jeśli jednak naprawdę chcesz mieć wiele funkcji na plik, prawdopodobnie najlepszą możliwą funkcją jest utworzenie funkcji najwyższego poziomu, która zwróci struct z function handles dla innych funkcji w pliku, a następnie dostęp do uchwytów funkcji z tego pliku struct. Ponieważ MATLAB nie wymaga użycia () z funkcjami, które nie wymagają żadnych danych wejściowych, zachowywałoby się to podobnie jak moduł Pythona (chociaż nie wiem, jak wpłynie to na wydajność).

Wiem, że to ból w szyi. Nie ma powodu, dla którego mathworks nie mógłby pozwolić na używanie plików jako pakietów, które obecnie robią dla folderów, na przykład wstawiając + na początku nazwy pliku. Ale nie robią tego.

2

Rozwiązaniem zbliżonym do tego, czego szukasz, może być wykorzystanie klas. Klasa zawiera metody, które mogą być publiczne (widoczne z zewnątrz) lub prywatne (widoczne tylko od wewnątrz). Implementacje metod klasy mogą być w multiple files lub w tym samym pliku.

Oto uproszczony przykład

classdef Class1 
    methods (Static) 
     function Hello 
      disp('hello'); 
     end 

     function x = Add(a,b) 
      x = Class1.AddInternal(a,b); 
     end 
    end 

    methods (Static, Access=private) 
     function x = AddInternal(a,b) 
      x = a+ b; 
     end 
    end 
end 

Przykład uży- teczność:

>> Class1.Hello 
hello 
>> Class1.Add(1,2) 

ans = 

    3 

>> Class1.AddInternal(2,3) 
Error using Class1.AddInternal 
Cannot access method 'AddInternal' in class 'Class1'. 
+0

Czy poleciłbyś korzystanie z zajęć na MATLAB? – yaron

+0

To naprawdę zależy od tego, co robisz ... OOP na pewno ma swoje miejsce w pewnym kontekście, ale nie jest lekarstwem na wszystko! – gregswiss

Powiązane problemy