2013-09-02 13 views
5

Znalazłem funkcję z "tajnym" wejściem, które ktoś może wytłumaczyć? Jaki mógł być powód? Czy istnieje wiele takich przypadków?Co to jest składnia wielopoziomowa, jak w funkcji MATLAB "radon"?

w udokumentowanych składni radon funkcji, istnieją dwa sposoby, aby połączyć się z roli - konwencjonalny z wejściami I i THETA (na obrazie i pożądanego kąta projekcji), a także możliwość, aby pominąć THETA i dają tylko I jako wejście.

Jednak w komentarzach znajdujących się w pliku radon.m na końcu znajduje się inna część, opisana jako "składnia podrzędna". To pozwala na wprowadzenie trzech wejść, w tym także liczby pożądanych projekcji. I to naprawdę działa!

Dlaczego więc nie jest to udokumentowane? Czy było dostępne w przeszłości, a następnie skasowane/zmienione (jak sugerowałaby "składnia pod postacią grandfathered")? Dlaczego to nadal działa?

I kolejne pytanie o radon.m:

Główną część funkcji jest obliczana poprzez wywołanie innej funkcji, zwany radonc. Co to jest? Gdzie się znajduje? Nie mogę go znaleźć ani nigdzie o tym nie wspomnieć.

+1

Zgaduję, że usunęli to z dokumentacji, aby "mocno zachęcić" ludzi do korzystania z nowej składni. Nadal działa na zgodność wsteczną - tak, że kod napisany w starszych wersjach MATLAB nadal działa w nowszych wersjach MATLAB. Ten proces jest bardzo powszechny; nazywa się [depracation] (http://en.wikipedia.org/wiki/Deprecation). Jest to podejście MathWorks. –

+1

Co do twojego drugiego pytania (znowu, zgadywanie tutaj) - zawsze, gdy jakaś nazwa funkcji kończy się na "c", zwykle oznacza, że ​​została zaimplementowana w C, a następnie skompilowana do pliku MEX, zazwyczaj w celu przyspieszenia wykonania niektórych część funkcji. –

+0

@RodyOldenhuis Dzięki.O pliku MEX - w jaki sposób mój komputer może uruchomić plik, jeśli nie ma tego samego pliku? Albo po prostu tego nie znalazłem ...?! – Adiel

Odpowiedz

9

„nabyte” składnia zazwyczaj oznacza, że ​​jest to składnia że

  1. wykorzystywane być udokumentowane i wspierane
  2. nadal musi być rodzajem obsługiwane ponieważ niektórzy klienci nadal powoływać się na niego, a MathWorks nie będzie chcesz, aby ich kod się zepsuł
  3. nie jest już zalecany, a zatem nie jest udokumentowany, aby nowi użytkownicy nie zaczęli na nim polegać.
  4. może zostać całkowicie usunięty w przyszłości.

radonc jest w \toolbox\images\images\private. Komenda which nie znajdzie go, ponieważ znajduje się w tym prywatnym katalogu i może być wywoływana tylko przez funkcje znajdujące się w katalogu bezpośrednio powyżej (co obejmuje samo radon). Plik to radonc.mexw64 (prawdopodobnie inne rozszerzenie pliku mex, jeśli jesteś na innej platformie), co oznacza, że ​​jest zaimplementowany jako skompilowany kod C, a nie kod MATLAB (i w przypadku, dlaczego właśnie o to pytasz, oznacza to, że nie widzę źródła).

Edycja: Należy zauważyć, że w tym samym katalogu znajduje się również plik radonc.m. Ten plik nic nie robi, ponieważ plik mex ma wyższy priorytet; jest tam, aby zapewnić pomoc dla funkcji radonc. Jeśli wpiszesz help radonc, zobaczysz, że pokazuje tekst pomocy dostarczony przez komentarze radonc.m.

+0

Próbowałem już tego wszystkiego, ale w mojej wersji (R2008a) jest napisane: "radonc not found". W każdym razie, dzięki za wyjaśnioną odpowiedź :) – Adiel

+0

Jak wyjaśniono, jeśli spróbujesz wykonać 'radonc', lub jeśli wpiszesz' which radonc', MATLAB go nie znajdzie. Dzieje się tak dlatego, że znajduje się w katalogu prywatnym, a więc nie na ścieżce - można go wywołać tylko z funkcji znajdujących się w katalogu bezpośrednio powyżej, który zawiera funkcję 'radon'. Niemniej jednak istnieje. (Uwaga: nie mam dostępnego 8a, ale uważam, że wszystko, co powiedziałem, jest prawdziwe dla tej wersji). –

+0

Wierzę również, że wszystkie twoje wyjaśnienia są prawdziwe. To, co napisałem, dotyczyło tylko "pomocy radonc" i co mi odpowiedział mój matlab ... – Adiel

Powiązane problemy