我正在关注iTunes上的Stanford Swift课程。我在第3课,教授编写了一个递归函数来评估一堆运算符和操作数。
以下是教授输入的代码:
class CalculatorBrain
{
private enum Op {
case Operand(Double)
case UnaryOperation(String, Double -> Double)
case BinaryOperation(String, (Double, Double) -> Double)
}
private var opStack = [Op]()
private var knownOps = [String:Op]()
init() {
knownOps["×"] = Op.BinaryOperation("×", *)
knownOps["+"] = Op.BinaryOperation("+", +)
knownOps["-"] = Op.BinaryOperation("-") { $1 - $0 }
knownOps["÷"] = Op.BinaryOperation("÷") { $1 / $0 }
knownOps["√"] = Op.UnaryOperation("√", sqrt)
}
func pushOperand(operand: Double) {
opStack.append(Op.Operand(operand))
}
func performOperation(symbol: String) {
if let operation = knownOps[symbol] {
opStack.append(operation)
}
}
private func evaluate(ops: [Op]) -> (result: Double?, remainingOps: [Op])
{
var remainingOps = ops
if !remainingOps.isEmpty {
let op = remainingOps.removeLast()
switch op {
case .Operand(let operand):
return (operand, remainingOps)
case .UnaryOperation(_, let operation):
let operandEvaluation = evaluate(remainingOps)
if let operand = operandEvaluation.result {
return (operation(operand), operandEvaluation.remainingOps)
}
case .BinaryOperation(_, let operation):
// code snipped
}
}
return (nil, ops)
}
}
我收到编译错误,但他没有。
我得到的错误是let operandEvaluation = evaluate(remainingOps)
行。我收到错误"使用本地变量'评估'在宣布之前"
有谁知道我为什么会收到此错误?它应该是对函数evaluate
的递归调用,而是编译器认为evaluate
是局部变量。
我在OS X 10.10.4上使用Xcode 6.4
谢谢!
答案 0 :(得分:1)
真奇怪的错误。 我也得到了这个错误。
但是我通过将我的括号添加到if子句错误下面的几行来修复它。
谢谢!
答案 1 :(得分:0)
6开括号和5关闭,可能是个问题。
但是我累了,也许我真的错过了一个两个极端(
答案 2 :(得分:0)
您错过了要关闭的}
:
if let operand = operandEvaluation.result {
而switch
并非详尽无遗,您需要添加缺失的case .BinaryOperation
。
答案 3 :(得分:0)
毕竟还有一个包围错字。对不起,谢谢你的帮助。