2011-11-25 38 views
2

函數內我創建的代碼,這是非常有用的位從結構動態分配變量:assignin(「來電顯示」,...)在Matlab

function getParam(param) 
% this function extracts the fields of structure param and assigns them 
% to variables of corresponding names in the caller workspace 
allFieldsParam = fieldnames(param); 
for iField = 1:length(allFieldsParam) 
    assignin('caller',allFieldsParam{iField},param.(allFieldsParam{iField})); 
end 

的問題是,當我叫getParam內一個函數,有時工作,有時它返回以下形式的錯誤:

??? Error using ==> assignin 
Attempt to add "blocksizes" to a static workspace. 
See MATLAB Programming, Restrictions on Assigning to Variables 
for details. 

    Error in ==> getParam at 7 
     assignin('caller',allFieldsParam{iField},param.(allFieldsParam{iField})); 

    Error in ==> classif_nmf_db at 15 
    getParam(param); 

有人有線索,我怎麼能解決這個問題?

問候 AL

回答

4

這是強制執行MATLAB一個良好的編程習慣。

你被稱爲位於此處的文件: Nested functions: Restrictions on Assigning to Variables

嵌套的作用域規則,在某些情況下匿名的,功能 需要在函數中使用的所有變量存在於 文本的代碼。不允許在運行時向此類型的 函數的工作空間添加變量。

如果您嘗試動態地將變量添加到 匿名函數,嵌套函數或包含嵌套函數的函數的工作空間,MATLAB會發出錯誤。 ...

羅蘭也有一個關於它的blog entry


UPDATE

對此文件交換提交看看: Pack & Unpack variables to & from structures with enhanced functionality (v2struct)

+0

感謝這就是我一直在尋找! – titus