如何控制Scilab中局部变量的绑定?

时间:2013-12-20 10:16:22

标签: binding scope scilab

我很难描述我的问题。看一下结尾的例子。

我有一个使用另一个函数G的函数F。为了使用函数F,我需要定义一个新的(本地/嵌套)函数g。函数g取决于本地(至G)变量,其常见名称为Abx等。问题是这些变量名是也用于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,并且密集。

1 个答案:

答案 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)