我试图弄清楚Golang中的简单切换,而我却陷入了变量范围。
print("Starting program")
val futureA = taskA()
futureA onComplete{
case Success(_) => print("future suceeded")
case Failure(_) => print("not able to execute future")
}
Await.result(futureA, Duration.Inf)
我已经在切换之前声明了resp,body,errs和req,并且我认为它们将在切换体之后可用。 编译器返回的是错误(来自案例声明)
15:18:52.357 [main] Starting program
15:18:52.563 [scala-execution-context-global-13] Starting nested future
15:18:52.564 [scala-execution-context-global-12] starting outer future
15:18:53.564 [scala-execution-context-global-12] finished outer future
15:18:53.566 [scala-execution-context-global-12] future suceeded
Process finished with exit code 0
所以我很好奇是开关体内的变量范围与函数中声明的有些不同吗?这段代码如何能够在切换体之后访问数据。
答案 0 :(得分:3)
您的问题在这一行:
resp, body, errs := req.Get(suburl)
短变量声明运算符:=
创建新变量并为它们赋值。这些 new 变量被称为“遮蔽”您在外部作用域中创建的变量,因为它们具有相同的名称,因此它们“隐藏”该作用域内的外部作用域变量。要解决此问题,只需将值从外部作用域分配给现有变量,而不是创建新的变量:
resp, body, errs = req.Get(suburl)
请注意此处使用作业=
而非简短声明:=
。