0
IML模塊中的嵌套範圍如何工作?IML模塊中的嵌套範圍
我正在嘗試創建一個優化模塊。它包含其他模塊。由於IML中的優化功能如何工作,因此內部模塊需要訪問本地範圍外部模塊。
這就是我想要工作。
start mvo_cvar(m,s,ub,lb,st);
start C_VAR(x) global(s, st);
r = st - x*s*x`;
return (r);
finish C_VAR;
start F_RETURN(x) global(m);
r = m`*x`;
return (r);
finish F_RETURN;
nvar = nrow(s);
ones = J(1,nvar,1);
ubound = ones*ub;
lbound = ones*lb;
con = (lbound || {. .}) //
(ubound|| {. .}) //
(ones || {0 1});
optn = j(1,11,0);
optn[1] = 1;
optn[2] = 0;
optn[10] = 1;
optn[11] = 1;
x = J(1,nvar,0);
x[1]=1;
call nlpqn(rc,results,"F_RETURN",x,optn,con) nlc="C_VAR";
return (results);
finish mvo_cvar;
然而,F_RETURN和C_VAR模塊不能找到s
,st
,或m
矩陣。我得到
ERROR: (execution) Matrix has not been set to a value.
operation : ` at line 6948 column 14
operands : m
m 0 row 0 col (type ?, size 0)
statement : ASSIGN at line 6948 column 9
traceback : module F_RETURN at line 6948 column 9
module MVO_CVAR at line 6940 column 1
例如。
有沒有辦法引用外部模塊的本地作用域?
謝謝。不完全是我所希望的答案。我將不得不使用宏來執行此操作,因爲這些全局變量的名稱會發生更改,並且在運行時間之前不會知道。 – DomPazz
當你打算使用它們時,你肯定知道變量的名字。 JUst定義了一個名爲SetGlobal()的模塊,用於從您想要使用的任何局部變量中分配全局變量。 – Rick