2014-06-06 4 views
6

Bir üstel işlevini aşırı yüklemek için ** kullanmak istiyorum. "^" Gibi bir şey kullanırsam çalışırım ama python tarzı yapmak ** ve bunu hızlıca kullanmak istiyorum. Bunu yapmanın herhangi bir yolu var mı?@infix func **() kullanarak üsler için ** nasıl kullanılır?

hatası: dışarı eşleştirme operatör bildirimi ile Operatör uygulaması

@infix func ** (num: Double, power: Double) -> Double{ 
    return pow(num, power) 
} 

println(8.0**3.0) // Does not work 
+0

'^' İstendiği gibi çalıştığından emin misiniz? Ben sadece ek olarak hareket etmek için var: 'println (1^2) == 3' – vol7ron

+1

@ vol7ron'^'Bitwise XOR Operatörüdür. '1^2' sadece tesadüfen' 1 + 2'ye eşittir. Lütfen [Hızlı Programlama Dili] 'ne bakın (https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language), Dil Kılavuzu -> Gelişmiş Operatörler -> Bitwise XOR Operatörü. – Lensflare

+0

@Lensflare: Python'dan bahsediyordum, burada '^' bir üs olarak davranmıyor. Ben yanlış olduğunu düşünüyorum ve yanlış bir '' '' '' '' '' '' '' '', '' '. – vol7ron

cevap

26

aşağıdaki gibi, işlevini tanımlamadan önce operatöre bildirmek gerekir:

Swift 2'de

:

import Darwin 

infix operator ** {} 

func ** (num: Double, power: Double) -> Double { 
    return pow(num, power) 
} 

println(8.0 ** 3.0) // works 

yılında Hızlı 3:

import Darwin 

infix operator ** 

func ** (num: Double, power: Double) -> Double { 
    return pow(num, power) 
} 

print(8.0 ** 3.0) // works 
+1

Beta 6'dan itibaren 'infix operator ** {} 'yazılmalıdır. – Klaas

+1

Teşekkürler @Klaas, Xcode 6 beta 6 için cevabı güncelledim. –

+0

Swift3: '' infix operatörü ** '' <- kaşlı ayraçlar gerekli değil – eonist

4

** 'nin komşu * veya/öncesinde çalıştırıldığından emin olmak için bir önceliğe sahip olmalısınız.

infix operator ** { associativity left precedence 160 } 

http://nshipster.com/swift-operators/ görüldüğü gibi, exponentiative operatörler < < gibi 160 önceliğe sahiptir ve >> bitsel kaydırma operatörleri yapmak.