为什么Swift需要显式参数类型,即使它们可以从默认值推断出来?
从Swift语言的第6页开始,很明显,语言设计者为这样一个事实感到自豪:虽然Swift是强类型的,但程序员通常不必担心类型,因为它们是从上下文推断出来的 因此,我觉得奇怪的是,即使默认参数值使参数类型清晰,也需要显式类型 例如,此声明中需要字符串:为什么Swift需要显式参数类型,即使它们可以从默认值推断出来?,swift,language-design,Swift,Language Design,从Swift语言的第6页开始,很明显,语言设计者为这样一个事实感到自豪:虽然Swift是强类型的,但程序员通常不必担心类型,因为它们是从上下文推断出来的 因此,我觉得奇怪的是,即使默认参数值使参数类型清晰,也需要显式类型 例如,此声明中需要字符串: func assign(motto: String = "Winter is coming") { /* ... */ } 尽管格言的类型在这里很清楚: func assign(motto = "Winter is coming") { /* ..
func assign(motto: String = "Winter is coming") { /* ... */ }
尽管格言的类型在这里很清楚:
func assign(motto = "Winter is coming") { /* ... */ }
而且比法律法规更容易阅读
你知道或者你能想象这是为什么吗
我在这一领域的进化中找不到任何变化要求。()
一次调查
我的第一个想法是,允许程序员省略参数类型将允许他们在参数声明中构建复杂类型,这可能很难读取:
func update(inventory = [
("Daenerys", ("dragons", -1)),
("Cersei", ("children", -3))
]) {
/* ... */
}
但是,这种危险并没有在变量声明中困扰语言设计者。这是合法的:
var houseData = [
["Stark": ["Sigil": "Dyer Wolf", "Motto": "Winter is coming"]],
["Lannister": [
"Sigil": "Lion",
"Motto": "Hear me roar",
"Saying": "A Lannister pays his debts"
]]
]
一个原因可能是为了让阅读您的代码的人的生活更轻松 假设我正在读你的代码,我看到了
func foo(param = bar.baz) {
我需要一秒钟的时间才能意识到param
是什么类型。我需要转到bar.baz
的定义,看看它是什么类型
与变量声明不同,参数的类型更为重要,因为方法的用户需要知道类型,以便知道传递给方法的内容
此外,使参数类型成为必需的也使编写更简单。只有一种情况:
否则会有两种情况:一种是带有可选类型注释的,另一种是带有可选默认参数子句的。很有意义。我不知道非文本可以是合法的默认值。