我对Function
的以下行为感到困惑:
In[1]:= InlineCellInMessage=Function[expr,DisplayForm[Cell[BoxData[MakeBoxes[expr,StandardForm]],"Input"]],{HoldAllComplete}]
Out[1]= Function[expr,MakeBoxes[expr,StandardForm]]
我希望在输出中的Function
内看到未评估的代码,如下例所示:
In[2]:= InlineCellInMessage=Function[x,x+1+1]
Out[2]= Function[x,x+1+1]
但是我在输出中得到了内联单元格。为什么会这样?
答案 0 :(得分:3)
这是FrontEnd渲染的结果。考虑:
InlineCellInMessage =
Function[expr,DisplayForm[Cell[BoxData[MakeBoxes[expr,StandardForm]],"Input"]],{HoldAllComplete}]
InlineCellInMessage // InputForm
输出:
InputForm[Function[expr, DisplayForm[Cell[BoxData[MakeBoxes[expr, StandardForm]], "Input"]], {HoldAll.Complete}]]
此外,在此用法中,参数HoldAllComplete
会影响函数的未来输入,而不会影响函数本身的创建。如果您希望Function
本身拥有HoldAllComplete
,则需要:
SetAttributes[Function, HoldAllComplete]