1

有没有办法在范围替换后打印表达式字符串?

var n = math.compile('x * 2');
n.eval({x:2}); // returns 4

// I WISH I could do this:
n.toString({x:2}); // returns '2 * 2'
4

1 回答 1

0

首先有必要了解 MathJS 解析为表达式树的方式,以及使用的不同类型的节点。您可以在文档中阅读更多内容。

代数变量被解析为符号节点。这些将需要替换它们的值。最简单的方法是使用转换函数,在上面给出的页面下方的 API 中对此进行了解释。

从文档

转换(回调:函数)

通过变换函数递归变换表达式树。类似于 Array.map,但在表达式树的所有节点上递归执行。回调函数是一个映射函数,接受一个节点,并返回一个替换节点或原始节点。函数回调被称为树中每个节点的回调(节点:节点,路径:字符串,父节点:节点),并且必须返回一个节点。参数路径是一个包含相对 JSON 路径的字符串。

当一个节点被回调函数替换时,变换函数将停止迭代,它不会迭代被替换的节点。

例如,用值为 3 的 ConstantNode 替换名称为“x”的 SymbolNode 类型的所有节点:

const node = math.parse('x^2 + 5*x')
const transformed = node.transform(function (node, path, parent) {
  if (node.isSymbolNode && node.name === 'x') {
    return new math.expression.node.ConstantNode(3)
  }
  else {
    return node
  }
})
transformed.toString() // returns '3 ^ 2 + 5 * 3'
于 2020-04-21T12:50:42.130 回答