我正在嘗試在我的八度環境中使用名爲optprop的matlab模塊。看起來代碼有一些兼容性問題。特別是,當我嘗試調用嵌套函數在八度/ matlab中看不到局部變量
xyz_image = rgb2xyz(rgb_image)
我獲得以下錯誤:
error: 'cwf' undefined near line 1809 column 15
error: called from
astm>getcwf at line 1809 column 4
astm at line 1843 column 5
makecwf>tryastm at line 74 column 5
makecwf at line 59 column 9
wpt at line 33 column 6
i_xyz2xyz at line 28 column 6
i_rgb2xyz at line 54 column 5
optproc at line 315 column 7
rgb2xyz at line 49 column 33
rgb2xyz_norm2 at line 10 column 12
導致錯誤是在astm.m文件中的代碼。此文件定義功能:從我的角度一切都很好這裏點
function z=astm(op,varargin)
persistent cwf lam
%cwf initialization
%nested function
function z=getcwf(name, varargin)
%...
z=cwf; %here cwf is undefined
%...
%actual nested function call
z=getcwf(varargin{:});
%...
。嵌套函數應該看到cwf。即使我使用八度,它應該支持一切,因爲optprop包在2007年上次更新。我也試過嵌套函數,下面的代碼工作得很好:
function nested_function_test()
disp('inside outer function');
local_variable = 'local string content';
function nested_function()
disp('inside nested function');
disp(local_variable);
end
disp('after nested function declaration');
nested_function();
end
我沒有看到這些代碼塊之間的任何區別。爲什麼cwf未定義?
更新:
爲了以防萬一。目前的解決方法,適用於我:
function z=getcwf(name, varargin)
cwf = varargin{end - 1};
lam = varargin{end};
%...
varargin{end + 1} = cwf;
varargin{end + 1} = lam;
z=getcwf(varargin{:});
不知道這是你的情況,在所有相關的,但是倍頻特別是偶然在會話重新啓動之前,無法「看到」更改。例如。看[這個錯誤](https://savannah.gnu.org/bugs/?46282)。我還親眼目睹了這種行爲,編輯內置函數和其他場景。另外,雖然八度支持嵌套功能,但某些功能仍然缺失。如果在重新啓動八度音程時問題仍然存在,以及它是否也存在於matlab中(如果有權訪問它)將會很有用。 –
謝謝,塔索斯,但似乎並非如此。問題仍然存在好幾天,所以會話重啓不起作用。至於功能支持,我相信八度應該已經完全支持嵌套功能。我附上了工作示例,並且我沒有看到我嘗試運行的模塊與我提供的此MWE之間有任何區別。 – Roman