2014-05-21 58 views
1

我正在使用Matlab R2013a我試圖在函數中使用'who'函數來檢索以名稱開頭的變量列表。在函數中使用函數「誰」在MATLAB中

比方說,我有可變的名單在我的工作區,如下所示:

  • A = 1
  • A_2 = 2
  • A_3 = 3
當我運行這個

who('a*'); 

它工作正常。

但是當我運行一個函數內同樣的事情是這樣的:

function someFunction() 

    who('a*'); 

end 

function someFunction() 

    disp(who('a*')); 

end 

事實並非如此。沒有錯誤,只是沒有輸出。

如果我在叫

myVariables.mat

Matlab的文件保存這些變量並運行此相同的函數中,像這樣:

function someFunction() 

    who('a*','myVariables'); 

end 

它仍然沒有按沒有工作。

我能理解爲什麼第一個可能因爲範圍而無法工作,但指定文件來運行「誰」功能應該可行......我錯過了什麼?

任何幫助,將不勝感激。


問候

Diaa

+0

沒錯這就是已經被加載。我的意思是在我調用who函數之前,我可以在函數中強制加載。 –

+0

如果你以前沒有,我會建議閱讀'doc誰'至少一次。我可以在那裏看到解決方案。 – Divakar

+1

@Divakar強制MATLAB函數接口中的MATLAB文件的工作,謝謝你。但是你會認爲使用location參數就足夠了。再次感謝,非常感謝。 –

回答

1

由於mentioned by @Daniel,函數的工作空間與基礎工作空間分離。有兩種方法可以使用who一個M文件內視察基地工作區:

  1. 使用script而不是函數(即省略function - 行;像使用函數一樣通過文件名啓動腳本):腳本共享基本工作區,因此,who將能夠看到所有變量。

  2. 使用evalinevalin('base','who')

+0

謝謝,更清楚空氣。 –

0

您試圖在函數內部訪問的變量。只有輸入參數和全局變量在函數中可見。你必須做一些事情,如:

function someFunction(a1,a2) 

    who('a*'); 

end 

如果你真的想使用動態的變量名,我會強烈建議改變設計。