1
Ich sah ein Beispiel auf "Pro Swift" Buch.Overload-Operator als generische Funktion
es dem Bediener überlastet, den ersten Parameter "LHS" ist eine Funktion, die T nimmt -> U.
aber "generateRandomNumber" -Funktion Int -> Int
Wie kann es auf Arbeit >> > Betreiber?
Wie funktioniert es?
danke.
import Foundation
infix operator >>> { associativity left }
func >>> <T, U, V>(lhs: T -> U, rhs: U -> V) -> T -> V {
return { rhs(lhs($0)) }
}
func generateRandomNumber(max: Int) -> Int {
let number = Int(arc4random_uniform(UInt32(max)))
print("Using number: \(number)")
return number
}
func calculateFactors(number: Int) -> [Int] {
return (1...number).filter { number % $0 == 0 }
}
func reduceToString(numbers: [Int]) -> String {
return numbers.reduce("Factors: ") { $0 + String($1) + " " }
}
let combined = generateRandomNumber >>> calculateFactors >>>
reduceToString
print(combined(100))
ich weiß dies. aber die generische Operatorfunktion nimmt das Argument auf der linken Seite ist T -> U. aber generateRandomNumber ist Int -> Int, kann nicht vom selben Typ sein. –
warum nicht? In diesem Fall T === Int und U === Int, das ist alles .... – user3441734
Kannst du mehr erklären? irgendein Beispiel? Wenn ich versuchte, eine generische Funktion zu erstellen, gebe den gleichen Typ zurück. es tauchte Fehler auf. "kann den Rückgabeausdruck des Typs 'T' nicht in den Rückgabetyp 'U'" umwandeln –