给定表达式
1 * 2 / 3 + 4
在实现操作顺序时,我试图写出方程的所有可能变体。如:
(1 * 2) / 3) + 4
和
(1 * (2 / 3)) + 4
这是我现在拥有的:
expression = [1.0, "+", 2.0, "+", 3.0, "+", 4.0]
storage = []
exp1 = expression #Make new object because insert method will overwrite expression object
storage << exp1.insert(0, "((").insert(4, ")").insert(7, ")")
但是 exp1
的变化也反射(reflect)在表达式中。我什至用不同的方法制作它们,但变化不断反射(reflect)在表达上。
如何保持表达式对象不变?我总共需要配置原始表达式 5 次,但是当我使用 insert
时,我很难保持它的干净。阅读 Ruby 文档,insert
方法是唯一适合我正在做的事情的方法。
除了数组之外,我是否必须使用不同的数据结构来存储 1 * 2/3 + 4
?
最佳答案
考虑使用 #dup
这样您就不会更改原始集:
expression.dup.insert(0, "((").insert(4, ")").insert(7, ")")
关于ruby - 如何实现数组中表达式的操作顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37354925/