英文:
mixed named and unnamed parameters in golang
问题
我遇到了一个代码问题,它给我报了一个错误:
>未命名和混合参数
func(uc fyne.URIWriteCloser, error) {
...
}
英文:
I am facing an issue with my code, and it is giving me an error:
>unnamed and mixed parameters
func(uc fyne.URIWriteCloser, error) {
...
}
答案1
得分: 17
看起来你声明了一个具有命名和未命名参数的函数,这是不允许的。
在函数中处理参数有两种方式。你可以给所有参数命名,或者不给任何参数命名。
下面是一个具有命名参数的有效函数签名。
func(uc fyne.URIWriteCloser, err error) {
// 做一些操作
}
而下面这个函数没有给参数命名。
func(fyne.URIWriteCloser, error) {
// 做一些操作
}
如果你给第一个参数命名,但是不给第二个参数命名
func(uc fyne.URIWriteCloser, error) {
// 做一些操作
}
那么你会看到这个错误
函数同时具有命名和未命名参数
所以问题在于第二个参数只声明了参数类型而没有给出参数名,而第一个参数则定义了类型并给出了参数名。
英文:
It looks like you declared a function that has a named, and an unnamed parameter, which you cannot do.
There are two ways you can handle parameters in a func. You can either name all of the parameters, or provide no names to any of the parameters.
This is a valid func signature with both parameters named.
func(uc fyne.URIWriteCloser, err error) {
// do something
}
And so is this, without naming the parameters.
func(fyne.URIWriteCloser, error) {
// do something
}
If you were to name the first param, but leave the second param unnamed
func(uc fyne.URIWriteCloser, error) {
// do something
}
Then you would see this error
Function has both named and unnamed parameters
So, the problem is that the second param simply declares the param type and not the name, while the first param is defining the type and naming the param.
答案2
得分: 3
根据函数类型的规范中的说明:
> 在参数或结果列表中,名称(IdentifierList)要么全部存在,要么全部不存在。
>
> - 如果存在,每个名称代表指定类型的一个项(参数或结果),并且签名中的所有非空名称必须是唯一的。
> - 如果不存在,每个类型代表该类型的一个项。
>
> 参数和结果列表始终用括号括起来,但如果只有一个未命名的结果,则可以将其写为未括起来的类型。
因此,要么删除uc
,要么添加err error
。
英文:
As specified in the specs for Function Types:
> Within a list of parameters or results, the names (IdentifierList) must either all be present or all be absent.
>
> - If present, each name stands for one item (parameter or result) of the specified type and all non-blank names in the signature must be unique.
> - If absent, each type stands for one item of that type.
>
> Parameter and result lists are always parenthesized except that if there is exactly one unnamed result it may be written as an unparenthesized type.
So either remove uc
, or add err error
.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论