关于可变参数入参问题

来源: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)
}

   

相关截图:

报错如下:

https://img.mukewang.com/climg/6187dc0609e7bd8a14560178.jpg

                                            

写回答

1回答

ccmouse

2021-11-08

这个它就是不允许你这么写。

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。

1
heixin_宝慕林129493
hp>哦哦 好 了解 谢谢老师解惑

h021-11-08
共1条回复

0 学习 · 1399 问题

查看课程