mixed named and unnamed parameters in golang

huangapple go评论85阅读模式
英文:

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.

huangapple
  • 本文由 发表于 2021年10月28日 12:59:34
  • 转载请务必保留本文链接:https://go.coder-hub.com/69748497.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定