2016-08-24 38 views
8

Nastąpiła zmiana Swift 3 dla Xcode 8 beta 6 i teraz nie jestem w stanie zadeklarować mojego operatora na mocy jak przedtem:Jak zadeklarować wykładnik/operator mocy z nową grupą poprzedzającą w Swift 3?

infix operator ^^ { } 
public func ^^ (radix: Double, power: Double) -> Double { 
    return pow((radix), (power)) 
} 

Czytałem trochę o nim i tam nowa zmiana been introduced in Xcode 8 beta 6

Od tego Zgaduję muszę zadeklarować grupę pierwszeństwo i użyć go do mojego operatora jak poniżej:

precedencegroup ExponentiativePrecedence {} 

infix operator ^^: ExponentiativePrecedence 
public func ^^ (radix: Double, power: Double) -> Double { 
    return pow((radix), (power)) 
} 

idę w dobrym kierunku, aby to działało? Co powinienem umieścić w {} grupie pierwszeństwa?

Moim ostatecznym celem jest, aby być w stanie dokonać operacji zasilających z prostego operatora szybkich, np:

10 ^^ -12 
10 ^^ -24 

Odpowiedz

9

Kod już kompiluje i działa - nie musisz zdefiniować relację pierwszeństwa lub grupę Zespolenie jeśli jesteś po prostu za pomocą operatora w izolacji, tak jak w przykładzie dałeś:

10 ^^ -12 
10 ^^ -24 

Jednakże, jeśli chcesz pracować z innymi operatorami, jak również łączenia ze sobą wielu wykładników, będziemy chcieli zdefiniować relację pierwszeństwa o numerze higher than the MultiplicationPrecedence i a right associativity.

precedencegroup ExponentiativePrecedence { 
    associativity: right 
    higherThan: MultiplicationPrecedence 
} 

Dlatego następujące wyrażenie:

let x = 2 + 10 * 5 ^^ 2 ^^ 3 

zostanie oceniona jako:

let x = 2 + (10 * (5 ^^ (2 ^^ 3))) 
//   ^^ ^^ ^^--- Right associativity 
//   ||  \--------- ExponentiativePrecedence > MultiplicationPrecedence 
//   \--------------- MultiplicationPrecedence > AdditionPrecedence, 
//       as defined by the standard library 

Pełna lista standardowych grup pierwszeństwa Biblioteka jest dostępna na the evolution proposal.

+0

Dziękujemy! aktualizacja uczyniła to jeszcze bardziej przejrzystym! :) – gbdavid

+0

@gbdavid Z przyjemnością pomogę :) – Hamish