1
「Pro swift」ブックの例を見ました。汎用関数としてのオーバーロード演算子
それはオペレータ、最初のパラメータ "LHS" はTをとる関数であるオーバーロードされた - > U.
が、 "generateRandomNumber" 機能がint - >のInt
はどのようにそれは上で動作することができます>> >演算子?
どのように動作しますか?
ありがとうございました。
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))
これはわかります。ジェネリック演算子関数は、左の引数をT - > Uとしますが、generateRandomNumberはInt - > Intです。同じ型ではありません。 –
なぜですか?この場合、T === IntとU === Int、それはすべて.... – user3441734
あなたはもっと説明できますか?どのような例ですか?私はジェネリック関数が同じ型を返すようにしようとしました。それはエラーを引き起こした。 "タイプ 'T'の戻り式を 'U'型を返すように変換することはできません" –