visual valores una tipos matriz matrices llenar hacer como asignar array arrays go

arrays - valores - Declare una matriz constante



matrices en c# (4)

Yo he tratado:

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 }

En primer lugar, la declaración y la inicialización funcionan bien, pero el segundo, el tercero y el cuarto no funcionan. ¿Cómo puedo declarar e inicializar la matriz de flotadores const?


Como otros han mencionado, no hay una construcción oficial de Go para esto. Lo más cercano que puedo imaginar sería una función que devuelva una porción. De esta forma, puedes garantizar que nadie manipulará los elementos del sector original (ya que está "codificado" en el conjunto).

He acortado tu porción para hacerlo ... más corto ...

func GetLetterGoodness() []float32 { return [...]float32 { .0817,.0149,.0278,.0425,.1270,.0223 } }


De Effective Go :

Las constantes en Go son solo eso, constantes. Se crean en tiempo de compilación, incluso cuando se definen como locales en funciones, y solo pueden ser números, cadenas o booleanos. Debido a la restricción del tiempo de compilación, las expresiones que los definen deben ser expresiones constantes, evaluables por el compilador. Por ejemplo, 1 << 3 es una expresión constante, mientras que math.Sin (math.Pi / 4) no se debe a que la llamada de función a math.Sin debe ocurrir en tiempo de ejecución.

Las divisiones y matrices siempre se evalúan durante el tiempo de ejecución:

var TestSlice = []float32 {.03, .02} var TestArray = [2]float32 {.03, .02} var TestArray2 = [...]float32 {.03, .02}

[...] le dice al compilador que descubra la longitud de la matriz en sí. Las rebanadas envuelven arreglos y son más fáciles de usar en la mayoría de los casos. En lugar de usar constantes, simplemente haga que las variables sean inaccesibles a otros paquetes utilizando una primera letra minúscula:

var ThisIsPublic = [2]float32 {.03, .02} var thisIsPrivate = [2]float32 {.03, .02}

thisIsPrivate está disponible solo en el paquete que está definido. Si necesita acceso de lectura desde afuera, puede escribir una función getter simple (vea Getters en golang ).


No existe una constante de matriz en Go.

Citando de la especificación del lenguaje Go: Constantes :

Hay constantes booleanas , constantes de runas , constantes de enteros , constantes de coma flotante, constantes complejas y constantes de cadenas . Las constantes de runas, números enteros, coma flotante y complejas se denominan colectivamente constantes numéricas .

Una expresión constante (que se usa para inicializar una constante) puede contener únicamente operandos constant y se evalúan en tiempo de compilación.

La especificación enumera los diferentes tipos de constantes. Tenga en cuenta que puede crear e inicializar constantes con expresiones constantes de tipos que tienen uno de los tipos permitidos como tipo subyacente . Por ejemplo, esto es válido:

func main() { type Myint int const i1 Myint = 1 const i2 = Myint(2) fmt.Printf("%T %v/n", i1, i1) fmt.Printf("%T %v/n", i2, i2) }

Salida (pruébalo en el área de juegos Go ):

main.Myint 1 main.Myint 2

Si necesita una matriz, solo puede ser una variable, pero no una constante.

Recomiendo este gran artículo de blog sobre constantes: Constants


Una matriz no es inmutable por naturaleza; no puedes hacerlo constante.

Lo más cercano que puede obtener es:

var 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 }

Tenga en cuenta el [...] lugar de [] : asegura que obtendrá una matriz (tamaño fijo) en lugar de una porción. Entonces los valores no son fijos pero el tamaño es.