Déclarez une constante tableau
J'ai essayé:
const ascii = "abcdefghijklmnopqrstuvwxyz"
const letter_goodness []float32 = { .0817,.0149,.0278,.0425,.1270,.0223,.0202, .0609,.0697,.0015,.0077,.0402,.0241,.0675, .0751,.0193,.0009,.0599,.0633,.0906,.0276, .0098,.0236,.0015,.0197,.0007 }
const letter_goodness = { .0817,.0149,.0278,.0425,.1270,.0223,.0202, .0609,.0697,.0015,.0077,.0402,.0241,.0675, .0751,.0193,.0009,.0599,.0633,.0906,.0276, .0098,.0236,.0015,.0197,.0007 }
const letter_goodness = []float32 { .0817,.0149,.0278,.0425,.1270,.0223,.0202, .0609,.0697,.0015,.0077,.0402,.0241,.0675, .0751,.0193,.0009,.0599,.0633,.0906,.0276, .0098,.0236,.0015,.0197,.0007 }
D'abord, la déclaration et l'initialisation fonctionne très bien, mais la deuxième, la troisième et la quatrième ne fonctionnent pas. Comment puis-je déclarer et initialiser const tableau de chars?
Vous devez vous connecter pour publier un commentaire.
Un tableau n'est pas immuable par nature; vous ne pouvez vous rendre constante.
Le plus proche que vous pouvez obtenir est:
Note le
[...]
au lieu de[]
: il vous permet d'obtenir une (de taille fixe) tableau au lieu d'une tranche. Si les valeurs ne sont pas fixes, mais la taille est.[...]T
syntaxe est du sucre pour[123]T
. Il crée un tableau de taille fixe, mais permet au compilateur de comprendre comment de nombreux éléments sont en elle.f(xs [5]int)
vous ne savez pas si le tableau est passé était constante ou mutables.cannot use constants.FilesRequired (type [4]string) as type []string in argument to strings.Join
letter_goodness
reste la même, même si vous ne pouvez pas empêcher les valeurs soient différentes.De Efficace Aller:
Tranches et les tableaux sont toujours évaluée lors de l'exécution:
[...]
indique au compilateur de déterminer la longueur du tableau lui-même. Enrouler les tranches de tableaux et sont plus faciles à travailler avec, dans la plupart des cas. Au lieu d'utiliser des constantes juste faire les variables inaccessibles à d'autres paquets à l'aide d'un minuscule première lettre:thisIsPrivate
est uniquement disponible dans le paquet il est défini. Si vous avez besoin d'un accès en lecture à partir de l'extérieur, vous pouvez alors écrire une simple fonction get (voir Les accesseurs en golang).Il n'y a pas une telle chose comme matrice constante en Aller.
Citant le Aller Langage De Spécification: Constantes:
Un Expression constante (qui est utilisé pour initialiser une constante) ne peuvent contenir que des constant opérandes et sont évalués au moment de la compilation.
La spécification répertorie les différents types de constantes. Notez que vous pouvez créer et initialiser les constantes de des expressions constantes de types ayant un de ces types que l' le type sous-jacent. Par exemple, ceci est valable:
De sortie (essayez sur la Aller De L'Aire De Jeux):
Si vous avez besoin d'un tableau, il ne peut être une variable, mais pas une constante.
Je vous recommande cet excellent article de blog à propos des constantes: Constantes
var arr = [2]int{2, 3}
Comme d'autres l'ont mentionné, il n'existe pas de Aller de construire pour cela. Le plus proche que je peux imaginer serait une fonction qui renvoie une tranche. De cette façon, vous pouvez garantir que personne ne sera à manipuler les éléments de l'original de la tranche (comme il est "codée en dur" dans le tableau).
J'ai raccourci votre tranche afin de le rendre plus court...:
cannot use [6]string literal (type [6]string) as type []string in return argument
doncreturn []float32 { ... }
...
afin de faire déclarer une tranche littérale au lieu d'un littéral de tableau. (2) changer le type de retour de[6]float32
. (3) donnez l'expression à une variable de tableau,a := [...]float32 { (etc.) }
et le retour de la tranche de tous les éléments:return a[:]
. (Tableau littéraux ne sont pas adressables, je ne suis pas clair pourquoi.)