あなたが正しいです - 変数に割り当てられた関数を呼び出すと(つまり、別の関数から返された)、パラメータ名はありません。パラメータは直接
func userFactory(factoryName: String) -> (_ firstname: String, _ lastname: String) -> User {
return { firstname, lastname in
return User(factoryName, firstname, lastname)
}
}
が
let factory = userFactory(factoryName: "Factory")
let user1 = factory("John", "Doe")
let user2 = factory("Jane", "Doe")
あなたがしながら、パラメータ名を使用する理由のように呼ばれることになる機能を返すとき_
すなわちを使用することを意図しているか、あなたはまだ発信者へのヒントができますがあなたのfunctionAsAReturnType
メソッドの中にあるのは、スコープ内で宣言された関数であり、変数に代入されていないからです。
func userFactory(factoryName: String) -> (_ firstname: String, _ lastname: String) -> User {
func inner(firstname: String, lastname: String) {
return User(factoryName, firstname, lastname)
}
// Look, parameter names :|
inner(firstname: "Bob", lastname: "Smith")
return inner
}
しかし、このルールは、あなたがこのようにあなたの関数を宣言した場合は適用されません。ここで
func userFactory(factoryName: String) -> (_ firstname: String, _ lastname: String) -> User {
let inner = { (firstname: String, lastname: String) in
return User(factoryName, firstname, lastname)
}
// No parameters names here
inner("Bob", "Smith")
return inner
}
、あなたはFUNC inner
(最後の例のような)の宣言を呼び出していません、いくつかのパラメータで変数inner
を呼び出しています。
あなたはすでにすなわち
// Calling a function defined on Int
let i = 1
i.distance(to: 100)
// But if you assign i.distance to a variable, you don't
// use the parameter names
let f = i.distance
f(100)
TLを存在する機能でこれを見ることができます; DR - あなたはFUNC、使用パラメータの名前を呼び出している場合。関数である変数を使用している場合は、そうではありません。
わかっていないのであれば、これが役立つかどうかはわかりません。また、私はこれについて間違っている場合私に知らせる:
オンポイント。冗長な説明をありがとう – user2511882