【发布时间】:2016-09-15 07:32:07
【问题描述】:
我正在制作一个非常简单的计算器,但我遇到了一个非常奇怪的编译时错误。我的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的? -
我已经定义了
Operation。它是一个带有关联值的枚举,例如case BinaryOperation((Double, Double) -> Double)。使用运算符*和/时,这很好,但使用运算符-和+时出现编译错误 -
我实际上要求您发布您的代码,展示您如何实现
Operationenum。 -
@ozgur 对不起。刚刚用
Operation枚举更新了帖子 -
你看过these search results吗?
标签: ios xcode swift compiler-errors functional-programming