swift - स्विफ्ट 3 में नए प्रीड्सन्स ग्रुप के साथ एक्सपोनेंट/पावर ऑपरेटर कैसे घोषित करें?



swift3 operator-precedence (1)

Xcode 8 बीटा 6 के लिए स्विफ्ट 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

आपका कोड पहले से ही संकलन और चलाता है - यदि आप बस ऑपरेटर का अलगाव का उपयोग कर रहे हैं, तो उदाहरण के लिए, आपको पूर्वता संबंध या किसी सहयोगीता को परिभाषित करने की आवश्यकता नहीं है:

10 ^^ -12
10 ^^ -24

हालांकि, यदि आप अन्य ऑपरेटरों के साथ काम करना चाहते हैं, साथ ही साथ कई एक्सपोनेंट्स को चेनिंग करना चाहते हैं, तो आप एक पूर्ववर्ती संबंध को परिभाषित करना चाहते हैं, जो कि MultiplicationPrecedence क्षमता और सही 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

मानक पुस्तकालय प्राथमिकता समूह की पूरी सूची विकास प्रस्ताव पर उपलब्ध है।





xcode8-beta6