我很难描述我的问题。看一下结尾的例子。
我有一个使用另一个函数G
的函数F
。为了使用函数F
,我需要定义一个新的(本地/嵌套)函数g
。函数g
取决于本地(至G
)变量,其常见名称为A
,b
,x
等。问题是这些变量名是也用于F
。由于Scilabs函数调用似乎是某种形式的宏扩展,它在调用/扩展时绑定局部变量而不是定义函数的点,而是使用F
中的局部变量的值而不是G
中的局部变量的值。在g
。我可以用另一种方式定义函数function y = F(f,x)
k = -10
y = f(x)
endfunction
function [a, b] = G(u)
k = u
deff('y = g(x)','y = x + k')
k = 10
a = g(1)
b = F(g,1)
endfunction
[a b] = G(0)
disp(a)
disp(b)
来绑定定义站点的变量吗?
11.
此程序显示值-9.
和1.
。我希望它显示1.
和k
。问题是f
中的局部变量f
的绑定是在f
的定义点决定的,而是在调用/扩展g
时。 }。如何定义在定义点绑定其局部变量的局部函数g
?
这个例子只是一个小例子。实际上我的函数 function y = g(x), y = t*h0(x) + A'*diag(d.^2)*A, endfunction
喜欢这样的东西
t
其中h0
是标量,A
是函数d
矩阵,G
向量是x
的本地。输入参数{{1}}是向量。矩阵和向量的最大尺寸可达1000x1000和1000,并且密集。
答案 0 :(得分:0)
您可以使用sprintf将值插入字符串,以便立即“定义”,或使用string()运算符。
function y = F(f,x)
k = -10
y = f(x)
endfunction
function [a, b] = G(u)
k = u
// Using the sprintf operator
deff('y = g(x)',sprintf('y = x + %d',k) )
// Using the string operator
deff('y = g(x)','y = x +' + string(k) )
k = 10
a = g(1)
b = F(g,1)
endfunction
[a b] = G(0)
disp(a)
disp(b)