loops - 语法错误:变量用作值,Go 中的 for 循环
问题描述
我对 Go 完全陌生,正在浏览https://tour.golang.org/flowcontrol/8
我尝试了以下for循环(它是否真正解决了页面带来的问题无关紧要,我只对这里的语法感兴趣)。您可以假设z
并x
给出:
for z < x; z -= (z*z - x) / (2*z) {
fmt.Println(z)
}
尝试运行时出现以下错误:
./prog.go:9:36: syntax error: unexpected {, expecting semicolon or newline
./prog.go:10:17: syntax error: z -= (z * z - x) / (2 * z) used as value
我可以通过将循环更改为这样来摆脱第一个错误:
for z < x; z -= (z*z - x) / (2*z); {
fmt.Println(z)
}
但我仍然得到第二个错误。
解决方案
你的循环应该是这样的
for ;z < x; z -= (z*z - x) / (2*z) {
fmt.Println(z)
}
; 应该出现在z < x条件之前这是因为,for循环的语法是for [control var];[健康)状况] ; [迭代] { //正文 }
就一个;可以用作空语句,因此通过使用它,我们为 for 循环提供了所有必需的参数。
; x < z; x++
正如您所看到的,第一个分号表示空/空语句(因为我们没有设置任何变量),第二个是条件,第三个是迭代命令。
现在您可以清楚地理解,在您的第二种方法中,
z < x; z -= (z*z - x) / (2*z);
z<x 是控制变量,这会导致错误,因为 (z<x) 不是变量。错误的原因是 z -=( z*zx)/(2*z) 被认为是条件值,因为这不是一个值,而是一个抛出错误的语句。
希望你能理解...
推荐阅读
- tensorflow - 为什么我的 TensorBoard 训练图不完整(使用 Jupyter/TensorFlow/Keras)?
- windows - Winrm 无法使用 dnscmd - Windows server 2012 R2 Standard server
- regex - 使用 sed 替换的正则表达式
- php - 在 Codeigniter4 中找不到类“App\Model\Users”
- javascript - 当弹出窗口关闭时,如何删除扩展弹出窗口(React 组件)的侦听器?
- sql - T-SQL 获取合同的取消日期
- python - 复制没有不同属性的字典的Pythonic方式
- c++ - 按下按钮时挂起应用程序,不明白为什么
- git - Git rebase 可能的错误
- asp.net-core-mvc - 如何稍后在操作方法中覆盖 [ResponseCache] 属性?