当使用从属内核的
默认情况下,
但我认为应该有更直接的解决方案。特别是当处理这种方式时,我会得到内部带有
我不知道如何将这样的字符串转换为适合打印为
附注:这个问题来自于那个问题。
MathLink
进行工作时,我在正确解析TextPacket
时遇到了问题。特别是当这样的数据包对应于从属内核生成的Message
时,我完全不知道如何正确处理它。我需要将这样的Message
打印在评估笔记本中,就像它们是由主内核生成的(但带有一些标记,以明确它来自从属内核)。我需要将对应于Message
的TextPacket
与仅用于Print[]
命令的TextPacket
分开。后者我也需要正确解析,并在评估笔记本中打印它们,附上一个小标记表示它来自从属内核。
以下是发生的情况示例:
link = LinkLaunch[First[$CommandLine] <> " -mathlink"]
Print@LinkRead[link]
LinkWrite[link,
Unevaluated[EnterExpressionPacket[Print[a]; 1/0; Print[b]]]]
While[Not@MatchQ[packet = LinkRead[link], InputNamePacket[_]],
Print[packet]]
默认情况下,
Message
以以下形式通过MathLink
传递:TextPacket[ 1
Power::infy: Infinite expression - encountered.
0]
看起来很丑。我发现唯一让它变得更好的方法是在从属内核中进行评估。
$MessagePrePrint = InputForm;
但我认为应该有更直接的解决方案。特别是当处理这种方式时,我会得到内部带有
HoldForm
的TextPacket
。TextPacket[Power::infy: Infinite expression HoldForm[0^(-1)] encountered.]
我不知道如何将这样的字符串转换为适合打印为
Message
的形式。附注:这个问题来自于那个问题。
$MessagePrePrint = StringReplace[ToString[InputForm[#]], "HoldForm[" ~~ Shortest[x___] ~~ "]" :> x] &
- SashaInputForm
中看起来很丑。我希望有一些“神奇”的函数可以强制从属核以便利的形式发送消息(例如作为整个Cell
内容,无需进一步呈现)。如果创建框渲染器的想法没有替代方案,我需要一些帮助。例如,我不明白为什么这会生成错误:ToExpression[ToString[ToBoxes[HoldForm[Infinity - Infinity]]]]
(它来自于输入Infinity - Infinity
生成的消息)。 - Alexey PopkovToExpression[ ToString[ToBoxes[HoldForm[Infinity - Infinity]], InputForm]]
。 - Sasha