2013-04-11 17 views
5

enter image description hereCo oznacza "cienie w ścieżce MATLAB"? Jak to zrobić w pliku?

Muszę to zrobić zawsze przed uruchomieniem pliku unitTester. Nie mogę zrozumieć, dlaczego jest to wymagane. Co to znaczy? A dlaczego nie jest wystarczająca?

[Aktualizacja]To może być problem z here. Jądro jest programowane w różnych technikach, w których nazwy plików są takie same. Muszę się upewnić, że tylko niektóre pliki są używane w każdym przypadku. Czy najłatwiej jest użyć tutaj pakietu, aby nie zepsuć przestrzeni nazw?

+0

Sprawdź [to] (http://www.mathworks.se/matlabcentral/newsreader/view_thread/254911) i [to] (http://compgroups.net/comp.soft-sys.matlab/files- shadowing-theselves -case-of-direc/866751) dyskusja. Napotkałem również ten błąd, ale nie pamiętam, co zrobiłem, aby go rozwiązać. Może możesz programowo zmienić ścieżkę wewnątrz kodu. Lub sprawdź, w którym katalogu plik jest uruchomiony, wpisując 'który' –

+0

Jeśli chodzi o aktualizację: Komunikat o błędzie dotyczy nazw skryptów testowych, które wydają się być takie same. To jest coś, co musisz najpierw naprawić.Następnie musisz sprawdzić, czy twój schemat nazewnictwa dla jądra wprowadza podobne problemy. –

Odpowiedz

5

MATLAB wyszukuje pliki m na swojej ścieżce wyszukiwania, możesz je wyświetlić za pomocą polecenia path. Jeśli masz wiele plików m o tej samej nazwie (tj. Część nazwy pliku przed rozszerzeniem, z wyłączeniem katalogów) na ścieżce MATLAB, wówczas MATLAB może wykonać tylko ten, który jest pierwszy na ścieżce.

Można użyć funkcji addpath i rmpath, aby dynamicznie modyfikować ścieżkę. Na przykład możesz automatycznie dodać odpowiednie katalogi automatycznie w swoim uruchomionym skrypcie testowym. Zauważ, że addpath dodaje nową ścieżkę do nagłówka listy ścieżek, co zapewnia, że ​​ma pierwszeństwo przed istniejącymi wpisami.

Innym sposobem zapobiegania takim konfliktom nazw jest packages.

EDIT: Aby przekonwertować katalogu w pakiecie, wykonaj następujące czynności:

  • Dodaj + na początku nazwy.
  • Upewnij się, że rodzic katalogu jest na ścieżce MATLAB.
  • Zaktualizuj wszystkie połączenia do funkcji w pakiecie, wysyłając do nich packagename. lub włączając zawartość pakietu przed połączeniami (import packagename.*).

Ogólnie wolę pakiety od dynamicznych modyfikacji ścieżek, ponieważ są one łatwiejsze w użyciu. Zauważ, że możesz zagnieździć pakiety (tj. my_matlab_files/+mypkg/+nested/foo.m).

+0

Czy możesz pokazać przykład jak zrobić różne jądra [tutaj] (http://i.stack.imgur.com/VKPjM.png) w paczki? Jak ten konkretny przypadek działałby z addpath/rmpath? Za I przeciw? Listlist to jądro, a sct to jądro. Testuję różne implementacje i myślę, że jest to mądry pomysł, aby oddzielić ich przestrzenie nazw od pakietu, co i tak ułatwi korzystanie z nich. Pierwszy pomysł brzmi trochę jak hxcking ... ale prawdopodobnie szybciej. – hhh

+0

@hhh: Zaktualizowałem swoją odpowiedź. –

+3

Ścieżka nie jest jedynym miejscem, w którym MATLAB wyszukuje funkcje. Ponadto może to nie być pierwszy wybór MATLAB. W szczególności każda funkcja, która znajduje się w twoim bieżącym katalogu roboczym, blokuje każdą funkcję o tej samej nazwie w dowolnym miejscu na ścieżce MATLAB. Aby uzyskać szczegółowe informacje, zobacz http://www.mathworks.de/de/help/matlab/matlab_prog/function-precedence-order.html – Alex

0

Napotkano ten sam problem w systemie OS X 10.10.3 z Matlab r2015a.

miałem pliki ~/electrochemistry/Matlab/

Jakoś zmiana nazwy ostatni folder małymi literami rozwiązany. Podczas rozwiązywania zauważyłem Matlab szukał w ~/electrochemistry/matlab/, ale nie mógł znaleźć to, co szukałem (tj moim .m akt I został uruchomiony)

więc teraz pracuję w ~/electrochemistry/matlab/ i problem jest rozwiązany