0
从递归枚举下的Swift手册中的示例中,我尝试向枚举中添加泛型类型,并且编译器无法推断出我传递的类型到评估功能。我能做些什么来改变代码来编译?这是编译器的错误还是限制?在递归枚举中添加泛型时:编译器无法推断类型
protocol Summable {
func +(lhs: Self, rhs: Self) -> Self
}
protocol Multipliable {
func *(lhs: Self, rhs: Self) -> Self
}
indirect enum ArithmeticExpression<T: protocol<Summable, Multipliable>> {
case Number(T)
case Addition(ArithmeticExpression, ArithmeticExpression)
case Multiplication(ArithmeticExpression, ArithmeticExpression)
}
func evaluate<T>(expression: ArithmeticExpression<T>) -> T {
switch expression {
case .Number(let value):
return value
case .Addition(let left, let right):
return evaluate(left) + evaluate(right)
case .Multiplication(let left, let right):
return evaluate(left) * evaluate(right)
}
}
let five = ArithmeticExpression.Number(5)
let four = ArithmeticExpression.Number(4)
let sum = ArithmeticExpression.Addition(five, four)
let product = ArithmeticExpression.Multiplication(sum, ArithmeticExpression.Number(2))
print(evaluate(product))