2016-08-24 5 views
8

は、Xcodeの8ベータ6スウィフト3の変化があっただと今私は前に私がしたように、電源のための私のオペレータを宣言することはできませんよ。私はそれについて少し読んだSwift 3の新しい優先順位グループで指数/電力演算子を宣言するにはどうすればいいですか?

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

とがありますこのことから、新たな変更been introduced in Xcode 8 beta 6

私は優先グループを宣言し、このように私のオペレータのためにそれを使用する必要が推測している:

precedencegroup ExponentiativePrecedence {} 

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

は、私がこの仕事をするために右方向に行くのですか?優先グループの{}内に何を入れる必要がありますか?

私の最終的な目的は、迅速で簡単な作業で電源操作を行うことができるようにすることです。例:

10 ^^ -12 
10 ^^ -24 

答えて

9

あなたのコードは、すでにコンパイルと実行 - あなたは優先順位の関係や定義する必要はありませんアソシエあなたは、単に、そのようなあなたが与えた例のように、単独でオペレータを使用している場合:

10 ^^ -12 
10 ^^ -24 

しかし、あなたが他の事業者と仕事をしたい、と同様に、複数の指数を一緒に連鎖する場合は、あなたがしたいですよ優先関係を定義するためにhigher thanMultiplicationPrecedenceおよびa right associativity

precedencegroup ExponentiativePrecedence { 
    associativity: right 
    higherThan: MultiplicationPrecedence 
} 

したがって、次の式:

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

標準ライブラリの優先順位グループの完全なリストはthe evolution proposalで提供されています:

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

は次のように評価されます。

+0

ありがとうございました!このアップデートにより、それはさらに明確になりました! :) – gbdavid

+0

@gbdavid喜んで:) – Hamish

関連する問題