【发布时间】:2025-12-05 07:30:01
【问题描述】:
我想知道是什么让两个“相似的函数”彼此不同并且可以明确地调用
这是我从自学中学到的
唯一性来自:函数名+参数顺序和参数名+返回类型。它们的组合必须是唯一的才能使函数具有唯一性(请参见下面的示例)
Nmu1和Num2会造成歧义,因为调用函数时没有引用返回类型(没有所谓的返回名,函数名已经充当了这个角色)虽然
Num3函数有不同的参数名称,但它不会将它与Num1和Num2中的函数唯一区分开来。因为在调用函数时不会引用参数名称,所以只有不同的参数名称不会使函数唯一;而Num4中的函数与上面的所有函数都不一样,因为它的签名函数名+参数顺序和参数名+返回类型在前面3个函数中是唯一的。-
Num5和Num6函数彼此不同,因为它们在定义时具有不同的参数顺序//Num1 func foo(guy name: String) -> String { return "Hi \(name)" } //Num2 func foo(guy name: String) { print("Hi \(name)") } //Num3 func foo(guy called: String) -> String { return "Hi \(called)" } //Num4 func foo(dude name: String) -> String { return "What's up \(name)" } //Num5 func foo(man name: String, from place: String) { print("Hi! I'm \(name) I come from \(place)") } //Num6 func foo(from place: String, man name: String) { print("Hi! I'm \(name) I come from \(place)") }
问题:我可能会遗漏甚至可能误解了某些部分。如果你能纠正我并添加我遗漏的部分,那将是非常好的
谢谢
[更新] 让我们就这个问题进行更多讨论。让我们从讨论the difference between Argument and Parameter 的问题开始。这个问题在这里很有意义!
回到swift官方文档中的引用
每个函数参数都有一个参数标签和一个参数名称。调用函数时使用参数标签;每个参数都写在函数调用中,前面有参数标签。参数名称用于函数的实现。默认情况下,参数使用参数名称作为参数标签。
参数、参数、参数标签和参数名称是不同的。这里的差异可以用于微分函数。
参数名称相同、参数顺序相同、返回类型相同甚至函数体相同的函数可以通过不同的参数标签进行区分。
func foo(dude name: String) -> Int {
print("Hi \(name)!")
return 1
}
func foo(man name: String) -> Int {
print("Hi \(name)!")
return 1
}
//foo(dude: String) & foo(man: String) is identical when calling
欲了解更多信息,请联系Multiple functions with the same name
【问题讨论】:
-
@MartinR 非常感谢。很有帮助!