我正在制作一个非常简单的计算器,但是我遇到了一个非常奇怪的编译时错误。在我的
奇怪的是,如果我移除以下内容:
代码编译通过,否则会抛出错误。
另一个奇怪的事情是,如果我将它们改成:
代码编译通过,没有抛出错误。
我有点疑惑,为什么使用运算符
如果您想知道如何实现
CalculatorBrain
类中,我遇到了以下错误:
这里是生成错误的代码:表达式过于复杂,无法在合理的时间内解决;请考虑将表达式分解为不同的子表达式
private var operations: Dictionary<String, Operation> = [
"π" : .Constant(M_PI),
"±" : .UnaryOperation({ -$0 }),
"×" : .BinaryOperation({ $0 * $1 }),
"÷" : .BinaryOperation({ $0 / $1 }),
"+" : .BinaryOperation({ $0 + $1 }),
"−" : .BinaryOperation({ $0 - $1 }),
"=" : .Equals
]
奇怪的是,如果我移除以下内容:
"±" : .UnaryOperation({ -$0 })
"+" : .BinaryOperation({ $0 + $1 })
"−" : .BinaryOperation({ $0 - $1 })
代码编译通过,否则会抛出错误。
另一个奇怪的事情是,如果我将它们改成:
"±" : .UnaryOperation({ (op1: Double) -> Double in return -op1 })
"+" : .BinaryOperation({ (op1: Double, op2: Double) -> Double in return op1 + op2 })
"−" : .BinaryOperation({ (op1: Double, op2: Double) -> Double in return op1 - op2 })
代码编译通过,没有抛出错误。
我有点疑惑,为什么使用运算符
*
和 /
时可以正常工作,而使用 -
和 +
却不行。如果您想知道如何实现
Operation
,这里是它的代码:private enum Operation {
case Constant(Double)
case UnaryOperation((Double) -> Double)
case BinaryOperation((Double, Double) -> Double)
case Equals
}
我使用的是Xcode版本为7.3.1上的Swift 2.2。
Operation
的? - Ozgur VatanseverOperation
。它是一个带有关联值的枚举,例如case BinaryOperation((Double, Double) -> Double)
。问题在于,当使用运算符*
和/
时,一切都很好,但是当使用运算符-
和+
时,我会得到编译错误。 - breaktopOperation
枚举更新了帖子。 - breaktop