我编写了执行从(未来)客户端接收到的函数的代码,在一个带有一些参数的循环中。将其称为func(命名)。
在函数内部,客户端通常在相同的变量中生成表达式(通过 GetUncertainty - 每个变量必须在使用前清除)。为此,简单的想法是使用 Block。稍后,执行处理函数外的 di 和 i 的代码。因此,di 和 i 必须是全局的(可能有更多,它很灵活)。
顺便说一句,我知道它效率不高,但效率不是问题。
func[v_, a_, r_] :=
(V = v; A = a; R = r;
Block[{V, A, R},i = V A + A 10 + R 100; di = GetUncertainty[i, {V, A, R}];] ;
Print[di])
问题是客户端必须手动重置变量。这意味着函数参数不能是 V_,A_,R_ ,否则块中的 vars 将被值替换。我没有设法以任何其他方式克服这一点。
类似问题中的另一个问题。如果我有 vars = {V,A,R,DR} ,那么 Block[vars , ..code.. ] 会抛出它不是列表的错误。而 Block[ {V,A,R,DR},。 .code..] 有效。如何克服这一点?
谢谢。