关于可变参数入参问题
来源:2-6 函数
weixin_宝慕林129493
2021-11-07 22:10:27
问题描述:调用div函数返回的结果为2,1;那fmt.PrintIn(div(7,3),6) 应该等价于fmt.PrintIn(2,1,6);但事实不是这样的,会报如上的错误,但fmt.PrintIn(div(7,3))就会正常运行,很疑惑...
网上的回答都很模糊,希望老师可以帮忙解答下
相关代码:
func div(a, b int) (q, r int) { return a / b, a % b } func main() { fmt.Println(div(7, 3), 6) }
相关截图:
报错如下:
1回答
这个它就是不允许你这么写。
div(7,3)并不等价于两个int。只是它可以赋值给两个int,但反过来不是任何两个int都可以用div(7,3)来表示。比如:
q,r := div(7,3)
可以的。
q,r,t := div(7,3), 6
就不可以。
其实这和是不是可变参数并没有太大关系。同学可以写一个
func f(a,b int) {...}
就可以说f(div(7,3))。
同样如果是
func (a,b,c int) {...}
div函数的输出就不能直接使用了。
最后说一下这么设计的原因,如果它能够方便的作用于类似fmt.Println(div(7, 3), 6),那么这个div的返回,必须是某种“元组”的结构,它具有可变长。那么这种结构和切片又有什么联系呢,可不可以互相转化呢,这就引入了一系列Go设计者不希望看到的复杂结构。而现在,它并不是一个数据结构,只是说这个函数可以返回两个int。
相似问题