在Julia中,typeof
可以获取对象类型,但和C++中的 decltype
不同,它获取的是对象的运行时类型,需要对表达式完成求值才能得到。然而有时我们可能希望不求值就得到表达式的类型,这在Julia中并没有直接提供内置方法来实现。
苦于 Wolfram LibraryLink 原本的接口使用起来过于繁琐,又受 wll-interface 的启发,近期开了一个新坑,尝试为 Wolfram LibraryLink 封装一套 Rust 的接口 wll-rs。
阅读本文需要一定 Rust 以及 Wolfram LibraryLink 的基础。
最近在做 ComputationalOptics包 的时候为了把 LightField
实现为一个比较典型的Wolfram语言风格的对象,使用了很多undocumented方法,这里主要是做一下记录。
需要注意的是,这里的“对象”不是指“面向对象”里所说的对象(虽然也有点关系),而是类似于 Entity
或者 TemporalData
这类的对象。
GeneralUtilities`
是Mathematica从版本10开始新加入的一个上下文。其中提供了大量的实用函数,包括代码生成、调试、静态分析、迭代器对象等各个领域,一定程度上弥补了Mathematica基础设施不足的状况。
众所周知,Mathematica中虽然使用下标形式非常方便,但如果对下标结构进行直接赋值,它将关联到内部符号Subscript
上。这样,在我们大量清理符号定义的时候可能会漏掉一些定义。类似地,导数Derivative
有同样的问题,比如对于
Mathematica 通常被宣传为 符号式 、 函数式 的编程语言,不过 维基百科 宣称它支持 13种编程范式,其中还包括 面向对象 编程。尽管大家似乎都不把 Mathematica 当编程语言,不过出于兴趣,也为了提升对 Mathematica 语言特性和面向对象的理解,于是有了这篇文章。
比较理想的情况是能够以类似 C++ 或者 Java 那样的形式来创建和使用类与对象,以此为目标进行设计。