2011-07-27 19 views
5

Chcę utworzyć funkcję function ExtremePoints = AnalyseData(ScanData).Matlab - użycie zmiennych obszaru roboczego

Chcę móc uruchomić funkcję bez przekazywania argumentu ScanData iw tej sytuacji chcę użyć zmiennej o tej samej nazwie z Matlab Workspace.

Czy jest to możliwe, aby użyć w treści funkcji zmiennej ScanData, która pojawi się w przestrzeni roboczej?

Czy powinienem najpierw zapisać zawartość zmiennej ScanData z obszaru roboczego w pliku .mat, a następnie załadować ten plik do treści tej funkcji?

+3

Jak już wspomniał @Edric: jest to (zdecydowanie) zniechęcone, aby to zrobić, ponieważ nie będziesz w stanie poprawnie ponownie użyć funkcji gdzie indziej bez większego bólu (brakujące zmienne, coś zupełnie innego przechowywanego w 'ScanData', mniej jasne kod, mlint nie ostrzeże Cię za błędy w 'eval' lub' evalin', ...). Więc zrób sobie przysługę i powstrzymaj się od korzystania z nich, gdy nie musisz! – Egon

+0

Chodzi o to, że wspomniana funkcja jest używana bardziej jako skrypt testowy i zamiast wywoływania wywołania z okna poleceń, chcę wywołać funkcję bezpośrednio z edytora i to jest powód zadawania tego pytania. Niemniej dziękuję za poradę! :) – Simon

+1

Istnieje kilka różnych rzeczy, które możesz zrobić. Przede wszystkim możesz zrobić z niego skrypt zamiast funkcji (po prostu pomiń 'function ...'). Wszystkie zmienne będą wtedy częścią podstawowego obszaru roboczego. Więc może się to zagracać i możesz potrzebować bawić się takimi rzeczami jak 'jasne zmienne; zamknij wszystko; clc; 'dla wygody. Lub możesz użyć funkcji [Uruchom konfiguracje] (http://www.mathworks.cn/help/techdoc/matlab_env/brqxeeu-131.html#brqxeeu-136). Są one jednak kłopotliwe do śledzenia w kontroli wersji lub na różnych komputerach. Więc oba mają za i przeciw. – Egon

Odpowiedz

11

Jest to możliwe, może nie do końca zalecane. Oto jak:

function ExtremePoints = AnalyseData(ScanData) 
if nargin == 0 
    ScanData = evalin('base', 'ScanData'); 
end 
% do stuff 

To ciągnie wartość ScanData z obszaru roboczego base jeśli żadne argumenty wejściowe są dostarczane (nargin == 0).

Korzystanie z eval i evalin jest ogólnie odradzane, ponieważ utrudnia zrozumienie kodu i ponowne użycie.

Powiązane problemy