我想制作一个计算器,它会问你算术运算符的优先级。例如优先级№1表示加法,№2表示除法,№3表示减法,№4表示乘法。 问题是:我是否需要使用过载运算符或只是简单地使用括号?
答案 0 :(得分:1)
执行运算符重载时,无法操纵运算符的优先级。
通常,运算符优先级硬连线到与表达式关联的语法。例如,在C ++就是这种情况。
您的项目面临的挑战是您希望在运行时使语法更加灵活。此时您正在绊倒动态编程语言。有关详细信息,请参阅https://en.wikipedia.org/wiki/Dynamic_programming_language。
当然,您想要做的是,但是您必须小心如何构建解析器和词法分析器。
答案 1 :(得分:0)
实际上,您可以使用运算符重载来实现操作运算符优先级的等效 - 它将涉及引入您自己的类并对它们执行操作。
当实现要降低优先级的操作时,可以通过存储2个值并存储操作或返回特定于该操作的类来实现它。 转换回结果时,您可以按所选顺序应用存储的操作。
优先级高于*: -
的示例function clearAndSave() {
// Clear fields
nameInput.value = "";
emailInput.value = "";
var html = [];
console.log(arraypeaople);
for(i = 0; x <= arraypeaople.length - 1; i++){
// Mark added rows to be able to remove them later
html += "<tr class='added-row'>";
html += "<td>" + arraypeaople[i].name + "</td>";
html += "<td>" + arraypeaople[i].email + "</td>";
html += "</tr>";
}
// Remove just the added rows
$("#output").find(".added-row").remove();
$("#output").append(html);
}
但是在你的问题中,你说的只是使用括号 - 我不清楚你正在做什么,但如果你只是通过添加括号来做,那听起来就更简单了。