抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

最近在做 ComputationalOptics包 的时候为了把 LightField 实现为一个比较典型的Wolfram语言风格的对象,使用了很多undocumented方法,这里主要是做一下记录。

需要注意的是,这里的“对象”不是指“面向对象”里所说的对象(虽然也有点关系),而是类似于 Entity 或者 TemporalData 这类的对象。

GeneralUtilities` 是Mathematica从版本10开始新加入的一个上下文。其中提供了大量的实用函数,包括代码生成、调试、静态分析、迭代器对象等各个领域,一定程度上弥补了Mathematica基础设施不足的状况。

问题的引入

ValueQ是Matheamtica中的一个非常有趣的函数,它判断一个表达式是否会进行求值,而且这种判断有时可以做到无副作用,哪怕求值本身是具有副作用的。比如

1
2
3
4
x=0;
y:=++x
v=ValueQ[y];
{v,x}

会得到{True,0}的结果。这里的ValueQ[y]显然并没有真正对y求值就作出了判断。不过很遗憾的是这其中哪怕只有略微的改动也会使其作用发生变化,例如

1
2
3
4
x=0;
y:=++x
v=ValueQ[y+0];
{v,x}

则会得到{True,1}