作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
偶尔我们想看看 System`
定义函数(当它们用 Mathematica 编写时)。这个问题是关于做到这一点的最佳方法。
要记住的几点:
ReadProtected
需要先删除。 Information
( ??
) 以难以阅读的格式给出定义(没有缩进,并且所有私有(private)上下文名称都在前面)。摆脱上下文名称并获得格式化代码的最佳方法是什么?Block[{$ContextPath = Append[$ContextPath, "SomeContext`Private`"], Information[symbol]]
.代码可以使用 Workbench 自动格式化。一些问题仍然存在,例如Information
不引用字符串,防止代码被复制到工作台中。 RunThrough
的代码当我发现它根本无法在 Windows XP 上运行时(事实证明,当临时文件的路径包含空格时,它无法引用临时文件的名称)。
Developer`ContextFreeForm
,但在较新的版本中不再起作用。
最佳答案
关于 pretty-print :以下是基于@Mr.Wizard 的答案的非常示意性的代码,以表明一些简单的规则可以大大提高代码的可读性:
Internal`InheritedBlock[{RunThrough},
Unprotect[RunThrough];
ClearAttributes[RunThrough, ReadProtected];
Block[{$ContextPath = Append[$ContextPath, "System`Dump`"]},
With[{boxes = ToBoxes@ DownValues[RunThrough]},
CellPrint[Cell[BoxData[#], "Input"]] &[
boxes /.
f_[left___, "\[RuleDelayed]", right___] :>
f[left, "\[RuleDelayed]", "\n", right] //.
{
RowBox[{left___, ";", next : Except["\n"], right___}] :>
RowBox[{left, ";", "\n", "\t", next, right}],
RowBox[{sc : ("Block" | "Module" | "With"), "[",
RowBox[{vars_, ",", body_}], "]"}] :>
RowBox[{sc, "[", RowBox[{vars, ",", "\n\t", body}], "]"}]
}]]]]
关于wolfram-mathematica - 阅读已定义函数的代码(尤其是从 System` 上下文中)的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8607813/
我是一名优秀的程序员,十分优秀!