elhoov
(EH)
1
I'm trying to test swift enums by extending the ArithmeticExpression from the example with variables but can't get it to work. Any help appreciated:
enum ArithmeticExpression: CustomStringConvertible {
case number(Int)
case variable(Character)
indirect case addition(ArithmeticExpression, ArithmeticExpression)
indirect case multiplication(ArithmeticExpression, ArithmeticExpression)
func eval() -> ArithmeticExpression {
switch self {
case .number(let n):
return self
case .variable(let c):
return self
case .addition(.number, .number): // HERE I want to access the numbers as e1 and e2
return ArithmeticExpression.number(e1 + e2) // Won't work because e1 and e2 are not defined
case let .multiplication(e1, e2): // SAME HERE
return ArithmeticExpression.number(e1 * e2)
}
}
}
bzamayo
(Benjamin Mayo)
2
You are close, you just have to repeat the 'inner bindings' in the case, see what you did for the basic number(let n) case and substitute in like so:
case .addition(.number(let e1), .number(let e2)):
You can also write this as case let .addition(.number(e1), .number(e2)): if you want to avoid writing let for each variable individually.
1 Like
elhoov
(EH)
3
I've been trying various combinations of as, in, where for 30 minutes and couldn't quite get it right. This makes sense and looks really clean, thanks a lot!