mtq558 2021-01-27 22:28 采纳率: 0%
浏览 0

逻辑我能懂为啥我的执行结果跟分析不一样呢!~

package main

import (
	"fmt"
)

func Addup() func (int) int{

	var n int =10
	var str string = "Hello"

	return func(x int)int{   //返回值是一个匿名函数,那么n和这个retur构成了一个闭包~,形成一个整体。
		n = n + x
		str += string(x)    //自加一下x
		fmt.Println("str=",str)
		return n          // 这个n 会因为调用 一直在改变值
	}
}


func main(){

		f:= Addup()
    // 因为反复调用~初始化一次,然后不断的在改变值,所以才有下面的这个结果。!!!!
		fmt.Println(f(1))   //11
		fmt.Println(f(2))   //13
		fmt.Println(f(3))   //16

	
}

理论上,结果应该是

str=hello1(ASCII码那个)

11

str=hello12

13

str=hello123

16

但是我的执行结果是:

  • 写回答

1条回答 默认 最新

  • XGrscM 2023-08-04 15:52
    关注

    int转字符串使用strconv包下的Itoa方法,下次遇到这种问题可以先打印变量看看~

    评论

报告相同问题?