Substitute Values of Variables in Functions That Hold Their Arguments
WORKFLOW
Substitute Values of Variables in Functions That Hold Their Arguments
Define a held expression that refers to the variable x:
x = 2;
e = Hold[x + 1]
Because Hold has the attribute HoldAll, x is not evaluated when the held expression is defined, so the body of the expression refers to the global variable x. The value of x is obtained when the Hold is released:
x = 4;
ReleaseHold[e]To effectively force x to evaluate when the held expression is defined, use With:
Now changes in the value of x have no effect on the value returned when the Hold is released:
x = 4;
ReleaseHold[e]Notes
This technique applies to any function with HoldAll, HoldFirst, HoldRest or HoldAllComplete attributes, for example, Function itself:
x = 2;
Function[y, x + y]
x = 2;
With[{x = x}, Function[y, x + y]]
Evaluate can be used to resolve a variable to its value in a held argument, but only when it occurs at the top level of the argument. Compare: