2016-03-05 59 views
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)) 

回答

0

我只是找到了答案,它其实很简单:

extension Int: Summable, Multipliable {}