问题
I am puzzled by the following behavior of Function
:
In[1]:= InlineCellInMessage=Function[expr,DisplayForm[Cell[BoxData[MakeBoxes[expr,StandardForm]],"Input"]],{HoldAllComplete}]
Out[1]= Function[expr,MakeBoxes[expr,StandardForm]]
I expected to see unevaluated code inside Function
in the output as in the following case:
In[2]:= InlineCellInMessage=Function[x,x+1+1]
Out[2]= Function[x,x+1+1]
But I get the inline cell inside output. Why does this happen?
回答1:
This is the result of FrontEnd rendering. Consider:
InlineCellInMessage =
Function[expr,DisplayForm[Cell[BoxData[MakeBoxes[expr,StandardForm]],"Input"]],{HoldAllComplete}]
InlineCellInMessage // InputForm
Output:
InputForm[Function[expr, DisplayForm[Cell[BoxData[MakeBoxes[expr, StandardForm]], "Input"]], {HoldAll.Complete}]]
Also, in this use the parameter HoldAllComplete
affects future input to the function, not the creation of the function itself. If you want Function
itself to have HoldAllComplete
you need:
SetAttributes[Function, HoldAllComplete]
来源:https://stackoverflow.com/questions/5616305/puzzled-by-function-body-evaluation