有没有办法在范围替换之后打印表达式字符串 ?
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'
答案 0 :(得分:0)
首先必须了解MathJS解析为表达式树的方式以及所使用的不同类型的节点。 您可以阅读更多here in the docs。
代数变量被解析为SymbolNodes。这些将需要替换为其值。最简单的方法是使用 transform 函数,该函数在上面上一页的API中进行了解释。
转换(回调:函数)
通过转换函数递归转换表达式树。 与Array.map类似,但是在Array.map中的所有节点上递归执行 表达式树。回调函数是接受的映射函数 一个节点,并返回该节点或原始节点的替换。 函数回调称为callback(node:Node,path:string, 父级:节点),必须返回树中的每个节点。 参数路径是包含相对JSON路径的字符串。
当节点替换为时,转换功能将停止迭代 回调函数,它将不会迭代替换的节点。
例如,替换名称为“ x”的所有SymbolNode类型的节点 具有值为3的ConstantNode:
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'