英文:
Why is "const true = false" allowed?
问题
-
你正在使用哪个版本的Go(go version)?
https://play.golang.org -
你做了什么?
运行了一个小程序:
package main
import "fmt"
const true = false
func main() {
if (true == false) {
fmt.Println("True equals to false")
}
fmt.Println("Hello World")
}
https://play.golang.org/p/KwePsmQ_q9
- 你期望看到什么?
错误或警告消息,提示我正在创建一个已经定义的名称的常量,并有可能破坏整个应用程序。
- 相反,你看到了什么?
程序正常运行,没有任何警告或阻止创建具有已定义名称的新常量的提示。
英文:
-
What version of Go are you using (go version)?
https://play.golang.org -
What did you do?
Run a small program:
package main
import "fmt"
const true = false
func main() {
if (true == false) {
fmt.Println("True equals to false")
}
fmt.Println("Hello World")
}
https://play.golang.org/p/KwePsmQ_q9
- What did you expect to see?
Error or warning message that I'm creating constant with already defined name, and potentially breaking whole app.
- What did you see instead?
Running without a problem. No warnings or anything to prevent creating new constant with already defined name.
答案1
得分: 10
true
和false
不是保留关键字,它们是预声明的标识符。
const (
true = 0 == 0 // 无类型布尔值。
false = 0 != 0 // 无类型布尔值。
)
这意味着true
和false
是两个简单的无类型布尔值。这就是为什么在你的例子中true
等于false
的原因。
更多信息请参考:https://golang.org/pkg/builtin/#pkg-constants
英文:
true
and false
are not reserved keywords. These are predeclared identifiers.
const (
true = 0 == 0 // Untyped bool.
false = 0 != 0 // Untyped bool.
)
This means that true
and false
are simple two untyped boolean values. This is the reason that in your example true
is equal to false
.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论