Озадачен функцией оценки тела - PullRequest
3 голосов
/ 11 апреля 2011

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

3 голосов
/ 11 апреля 2011

Это результат рендеринга 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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...