3 Stimmen

Verwirrt durch die Bewertung der Funktion Körper

Ich bin verwirrt über das folgende Verhalten von Function :

In[1]:= InlineCellInMessage=Function[expr,DisplayForm[Cell[BoxData[MakeBoxes[expr,StandardForm]],"Input"]],{HoldAllComplete}]
Out[1]= Function[expr,MakeBoxes[expr,StandardForm]]

Ich hatte erwartet, unbewerteten Code in Function in der Ausgabe wie im folgenden Fall:

In[2]:= InlineCellInMessage=Function[x,x+1+1]
Out[2]= Function[x,x+1+1]

Aber ich erhalte die Inline-Zelle innerhalb der Ausgabe. Warum passiert das?

3voto

Mr.Wizard Punkte 23929

Dies ist das Ergebnis des FrontEnd-Renderings. Beachten Sie:

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}]]

Außerdem wird bei dieser Verwendung der Parameter HoldAllComplete betrifft die zukünftige Eingabe in die Funktion, nicht die Erstellung der Funktion selbst. Wenn Sie wollen Function selbst zu haben HoldAllComplete Sie benötigen:

SetAttributes[Function, HoldAllComplete]

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X