Wolfram mathematica 如何隐藏$Aborted消息?
我知道我正在中止评估,当侧面的黑条消失时可以看到它。因此,不需要这个信息。如何关闭它?如果您没有将Wolfram mathematica 如何隐藏$Aborted消息?,wolfram-mathematica,Wolfram Mathematica,我知道我正在中止评估,当侧面的黑条消失时可以看到它。因此,不需要这个信息。如何关闭它?如果您没有将$Post用于其他用途,或者如果您可以组合函数,则可以使用: $Post = # /. $Aborted -> Null &; 请注意,由于程序可能在其控制流中使用$Aborted,您可能会破坏某些内容 更有力地说,解决问题Alexey证明: $Post = Function[Null, Unevaluated@# /. $Aborted -> Null, HoldAllCo
$Post
用于其他用途,或者如果您可以组合函数,则可以使用:
$Post = # /. $Aborted -> Null &;
请注意,由于程序可能在其控制流中使用$Aborted
,您可能会破坏某些内容
更有力地说,解决问题Alexey证明:
$Post = Function[Null, Unevaluated@# /. $Aborted -> Null, HoldAllComplete];
以下似乎有效:
SetAttributes[katch, HoldAll];
katch[x_] := CheckAbort[x, Return@Null]
$Pre = katch;
测试后,请记住将$Pre返回到其以前的值:
$Pre =.
不过,可能会干扰一些内部中止捕获
编辑
西蒙的版本:
$Pre = Function[{x}, CheckAbort[x,Return@Null], {HoldAll}]
以下是Simon建议的基于
$Pre
的方法和Mr.Wizard建议的基于$Post
的方法的概括
在这两种情况下,应将HoldAllComplete
属性设置为纯函数,并通过Unevaluated
将x
(输入表达式)包装在纯函数中,以便它们能正确处理具有Head
sSequence
、unevaluate
的输入
比较基于$Pre
的解决方案的两个版本:
f1 = Function[{x}, CheckAbort[x, Null], {HoldAll}]
f2 = Function[{x}, CheckAbort[Unevaluated@x, Null], {HoldAllComplete}]
In[3]:= f1@Sequence[1,2]
f1@Abort[]
f1@Evaluate[Abort[]]
f1@Unevaluated[1+1]
Out[3]= 1
Out[5]= $Aborted
Out[6]= 2
In[7]:= f2@Sequence[1,2]
f2@Evaluate[Abort[]]
f2@Unevaluated[1+1]
Out[7]= Sequence[1,2]
Out[9]= Unevaluated[1+1]
可以看出,第一个版本很容易被Evaluate[Abort[]]
破坏,并且在输入表达式具有头s序列和未评估时工作不正确。对于没有HoldAllComplete
属性的任何一个参数函数,这通常是正确的。由于$Pre
、$Post
和friends都是一个参数函数,因此必须始终为它们设置HoldAllComplete
属性
使用Null
作为CheckAbort
的第二个参数也没有问题(不需要Return@Null
)。在我的机器上(Windows 2000下的Mathematica 7.0.1)$Abort
在f2
的情况下永远不会返回
基于$Post
的解决方案也是如此。它可以概括如下:
$Post = Function[x, If[Unevaluated@x =!= $Aborted, Unevaluated@x],
HoldAllComplete]
测试表达式:
In[14]:= Unevaluated[1+2]
Sequence[1,2]
$Aborted
Abort[]
Out[14]= Unevaluated[1+2]
Out[15]= Sequence[1,2]
从技术上讲,这不是一条消息,而是一个返回的表达式。。有没有办法不显示它?当然,请看我的答案。;-)谢谢此会话是否依赖于所有会话?环境变量不是持久的。我在用户目录中使用Kernel/init.m来设置像$historyllength
之类的东西。。。$historyllength
是否表示撤消的数量?我在想类似的事情,但在另一端:使用$Pre将所有内容包装在CheckAbort[#,Null]&
中,但它不起作用…:(@Mr.Wizard:谢谢。虽然撤销很糟糕。+1:是的,这就是我试图做的。它可以做成一行$Pre=Function[{x},CheckAbort[x,Null],{HoldAll}]
+1 Alexey。我现在也更新了我的答案。您可能希望以主要格式重写您的答案,也就是说,如果您的答案被接受,那么您的答案不会从属于其他答案。