Kann ich das mathematische Vorzeichen (+, -, *) irgendwie als Funktionsparameter senden? Ich möchte die Funktion reduce()
für ein anderes Vorzeichen aufrufen.
4 Antworten
In schnellen Vorzeichen sind Funktionsnamen für eine bestimmte mathematische Operation. Um das Vorzeichen als Parameter zu übergeben, muss der Parametertyp eine Funktion sein, die zwei Zahlen akzeptiert und eine Zahl zurückgibt. Wenn Sie einen Befehl drücken und auf ein Zeichen klicken, wird dessen Definition wie folgt angezeigt:
public func + (lhs: UInt8, rhs: UInt8) -> UInt8
public func + (lhs: Int8, rhs: Int8) -> Int8
public func + (lhs: UInt16, rhs: UInt16) -> UInt16
public func + (lhs: Int16, rhs: Int16) -> Int16
public func + (lhs: UInt32, rhs: UInt32) -> UInt32
public func + (lhs: Int32, rhs: Int32) -> Int32
public func + (lhs: UInt64, rhs: UInt64) -> UInt64
public func + (lhs: Int64, rhs: Int64) -> Int64
public func + (lhs: UInt, rhs: UInt) -> UInt
öffentliche Funktion + (lhs: Int, rhs: Int) -> Int
In Ihrem Fall sollte Ihre Reduzierungsfunktion wie folgt aussehen
func reduce(sign: (Int,Int)->Int) -> Int{
return sign(2,3)
}
reduce(*)
reduce(-)
func doSomeCalculation(_ fun:((Int, Int) -> Int)) -> Int {
return fun(12,13)
}
doSomeCalculation(+) // 25
doSomeCalculation(-) // -1
Das gleiche kann für UInt
, IntXX
usw. gemacht werden.
+
ist im Grunde einfach eine Funktion, die zwei Argumente akzeptiert und die Summe davon zurückgibt. Da es sich bei func
um Objekte wie alle anderen handelt, können Sie sie als solche weitergeben.
Auf die gleiche Weise können Sie +
an reduce
übergeben.
Ja, Sie können einen beliebigen binären Operator an die Funktion reduce()
senden, sofern der ursprüngliche Wert und die Elemente in der Auflistung vom gleichen Typ sind und der Operator somit angewendet werden kann.
Stellen Sie sich Operatoren als Funktionen / Abschlüsse vor und Sie werden verstehen, warum dies in Swift möglich ist. Tatsächlich sind Operatoren genau wie Funktionen - sie werden als Verschlüsse bezeichnet.
Denken Sie auch darüber nach, wie neue Operatoren hinzugefügt werden können - Sie definieren eine Funktion mit dem Operatornamen, die eine Anzahl von Parametern akzeptiert, die der Operatorarität entsprechen.
Daher ist Folgendes syntaktisch korrekt und liefert die erwartete Ausgabe (6
):
[1,2,3].reduce(0, combine: +)
Als Charakter senden und dann wechseln, um Folgendes zu identifizieren:
func acceptASign(sign: Character) {
switch sign {
case "+":
//do some addition
case "-":
//do some subtraction
case "*":
//do some multiplication
case "/":
//do some division
default:
break;
}
}
Neue Fragen
swift
Swift ist eine sichere, schnelle und ausdrucksstarke Allzweck-Programmiersprache, die von Apple Inc. für seine Plattformen und Linux entwickelt wurde. Swift ist Open Source. Verwenden Sie das Tag nur für Fragen zu Sprachfunktionen oder wenn Sie Code in Swift benötigen. Verwenden Sie die Tags [ios], [ipados], [macos], [watch-os], [tvos], [cocoa-touch] und [cocoa] für (sprachunabhängige) Fragen zu den Plattformen oder Frameworks.