spec говорит, что:
Константы могут быть напечатаны или неттипированы
У меня есть небольшое сомнение в моем понимании. Рассмотрим этот пример в спецификации:
const l = "hi" // l == "hi" (untyped string constant)
const m = string(k) // m == "x" (type string)
Спектр говорит:
константеможет быть задан тип явно объявлением константы или преобразования или неявно при использовании в объявлении переменной или назначение или как операнд в выражении
В этом утверждении, почему не набирается l
, поскольку оно явно является объявлением константы?
Это поведение более ясное с другим примером
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")
компилируется из-за этого утверждения о Assignability в spec?
x - нетипизированная константа, представляемая значением типа T.
Мой аргумент следующий:
- "sarkozy" - нетипизированный литерал.
- Таким образом, "sarkozy", представляемый
Foo
, означает, что я могу ввести coerce как этоFoo("sarkozy")
-
f(s)
терпит неудачу, потому что s не является нетипизированным.