Озадачен функцией оценки тела
Я озадачен следующим поведением 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]
Но я получаю встроенную ячейку внутри вывода. Почему это происходит?
1 ответ
Решение
Это результат рендеринга 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]