Озадачен функцией оценки тела

Я озадачен следующим поведением 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]
Другие вопросы по тегам