2013-10-21 24 views
2

我有一個嵌套的函數,它調用一個基本上包含常量和字符串的一些定義的腳本。我需要將這些變量傳遞給基礎工作區。我知道我可以將它們定義爲global,這應該不是最好的解決方案,是嗎?如何爲多個變量使用assignin?

傳統的方式,使用函數的輸出參數似乎對我來說太複雜了。 (這實際上只是一次性調用,所以我不想炸燬我的代碼)所以我想過使用assigninwho,但它似乎不適用於單元陣列或逗號分隔列表。可能我只是缺少一些語法優化。

function myFunction() 

myScriptWithDefinitions; 

% who returns a cell array with all variables from my script 
temp = who; 
% now I try to assign these variables to my base workspace 
% these are my attempts, none of them working 
assignin('base',who); 
assignin('base',temp{:}); 
assignin('base',{temp{:}}); 

... 
end 

我知道我通常需要傳遞一個名稱列表和一個值列表。 有沒有進一步的想法?


編輯:像

assignin('base',{'A','B'},{2,5}) 
% or 
assignin('base',{'A',2},{'B',5}) 

不工作,所以我想assignin一般是不是一種選擇。

+0

只是爲了您的信息:函數的名稱是assignin,並且必須有第三個參數:assignin(ws,'var',val);但我仍然無法找到問題的解決方案... –

+0

是的,謝謝,但它只是一種類型,因此不在我的代碼中。 – thewaywewalk

回答

2

with assignin您只能一次賦值1個變量。

用「誰」得到一個字符串數組,它包含變量的名稱。現在,如果你有這樣的名單:

myVarList=who; 

你可以遍歷並分配變量到工作區:

myVarList=who; 

for indVar = 1:length(myVarList) 
    assignin('base',myVarList{indVar},eval(myVarList{indVar})) 
end 

注:這是一個eval的解決方案......如果有人知道一個快速更換爲此,請讓我知道:)

+0

我剛要實現這個;)它不是很優雅,但工作! – thewaywewalk