【发布时间】:2020-03-18 15:34:59
【问题描述】:
Go Programming Language Specification 说:
常量可以有类型也可以无类型
我对自己的理解有点怀疑。 考虑一下规范中的这个例子:
const l = "hi" // l == "hi" (untyped string constant)
const m = string(k) // m == "x" (type string)
规范说:
constant 可以通过常量声明显式地赋予一个类型,或者 转换,或在变量声明或变量中使用时隐式转换 赋值或作为表达式中的操作数
通过这句话,为什么不输入l,因为它显然是一个常量声明?
使用另一个example,这种行为更清楚
type Foo string
func f(a Foo) {}
func main() {
f("sarkozy")
const t = "julie gayet"
f(t)
s := "hollande"
//compile error
// f(s)
f(Foo(s)) // ok
}
f("sarkozy") 编译的原因是由于规范中关于可分配性的声明吗?
x 是一个无类型的常量,可以用 T 类型的值表示。
我的论点如下:
- “sarkozy”是一个无类型的文字。
- 因此“sarkozy”可以用
Foo表示,这意味着我可以像Foo("sarkozy")那样键入强制 -
f(s)失败,因为 s 不是无类型。
【问题讨论】:
-
我会推荐任何对此感兴趣的人阅读The Go Blog: Constants。
标签: go