9

Xcode 8 ベータ 6 の Swift 3 に変更があり、以前のように自分の演算子を電力として宣言できなくなりました。

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

私はそれについて少し読んだところ、Xcode 8ベータ6で導入された新しい変更があります

このことから、優先グループを宣言し、次のように演算子に使用する必要があると推測しています。

precedencegroup ExponentiativePrecedence {}

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

これを機能させるために正しい方向に進んでいますか?優先度グループの {} には何を入れればよいですか?

私の最終的な目標は、単純な演算子を使用して電源操作を迅速に実行できるようにすることです。たとえば、次のようになります。

10 ^^ -12
10 ^^ -24
4

1 に答える 1

10

コードはすでにコンパイルおよび実行されています。次の例のように、単に演算子を単独で使用している場合は、優先関係や結合性を定義する必要はありません。

10 ^^ -12
10 ^^ -24

ただし、他の演算子を使用したり、複数の指数を連鎖させたりする場合は、と右結合性よりも高い優先順位関係を定義する必要があります。MultiplicationPrecedence

precedencegroup ExponentiativePrecedence {
    associativity: right
    higherThan: MultiplicationPrecedence
}

したがって、次の式:

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

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

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

標準ライブラリの優先順位グループの完全なリストは、進化の提案で入手できます。

于 2016-08-24T08:09:26.280 に答える