2011-04-11 51 views
3

我受的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

嘗試使用'InlineCellInMessage:= Function' – Elalfer 2011-04-11 02:53:39

回答

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] 
+0

有趣,'HoldAllComplete [DisplayForm [細胞[BoxData [MakeBoxes [EXPR,StandardForm], 「輸入」] ]]'也被渲染。有沒有辦法來控制這種行爲? – 2011-04-11 03:40:07

+0

我不知道我們可以直接設置屬性來內置'保護'功能。謝謝你的觀點! – 2011-04-11 03:47:19

+0

最直接的路線是像我一樣使用''InputForm',但我認爲你需要不同的行爲。請具體說明。 – 2011-04-11 04:26:33