Let's say I have a function
MyFunc[x_] := x + y
I can do this:
Block[{y = 1}, MyFunc[1]]
which gives the result 2
correctly.
Now, what to do if I want to save {y = 1}
into a variable, something like
var = {y = 1};
Block[var, MyFunc[1]]
This wouldn't work. I've experimented with different forms of Hold
, but couldn't make it work.
y = 1;
Block[{y = y}, MyFunc[1]]
2
Note the syntax colouring which indicates that the first y
is local.
We can prove that the y
passed into MyFunc[1] is the local y.
Passing in var
as a list is tricky, but here is one way suitable for limited cases.
var = HoldForm[{y = 1}];
func = ToString[Hold[Block[var, MyFunc[1]]]];
func = StringReplace[func, "var" -> ToString[var]];
ReleaseHold[ToExpression[func]]
2