vikingas traductor tatuajes simbolos significado runico proteccion para nordicas nombre letras escribir cómo celtas alfabeto go rune

go - traductor - runas significado simbolos



¿Qué es una runa? (5)

¿Qué es una rune en Go?

He estado buscando en Google, pero Golang solo dice en una línea: rune es un alias para int32 .

Pero, ¿cómo es que los números enteros se usan como cajas de intercambio?

La siguiente es una función swapcase. ¿Qué es todo el <= y - ?

¿Y por qué no switch tiene argumentos?

&& debería significar pero, ¿qué es r <= ''z'' ?

func SwapRune(r rune) rune { switch { case ''a'' <= r && r <= ''z'': return r - ''a'' + ''A'' case ''A'' <= r && r <= ''Z'': return r - ''A'' + ''a'' default: return r } }

La mayoría de ellos son de http://play.golang.org/p/H6wjLZj6lW

func SwapCase(str string) string { return strings.Map(SwapRune, str) }

Entiendo que esto es mapear rune a string para que pueda devolver la cadena intercambiada. Pero no entiendo exactamente cómo funcionan las rune o byte aquí.


De las notas de la versión Go lang: http://golang.org/doc/go1#rune

Rune es un tipo. Ocupa 32 bits y está destinado a representar un CodePoint Unicode . Como analogía, los caracteres ingleses establecidos codificados en ''ASCII'' tienen 128 puntos de código. Por lo tanto, es capaz de caber dentro de un byte (8 bits). A partir de esta suposición (errónea), C trató a los caracteres como ''bytes'' char , y ''cadenas'' como ''secuencia de caracteres'' char* .

Pero adivina que. Hay muchos otros símbolos inventados por los humanos además de los símbolos ''abcde ..''. Y hay tantos que necesitamos 32 bits para codificarlos. En golang, una string es una secuencia de runes .

El paquete Unicode http://golang.org/pkg/unicode/ puede dar una idea de la riqueza del desafío.


Intenté mantener mi lenguaje simple para que un profano entendiera las rune .

Una runa es un personaje. Eso es.

Es un solo personaje. Es un personaje de cualquier alfabeto de cualquier idioma de cualquier parte del mundo.

Para obtener una cadena que usamos

double-quotes ""

O

back-ticks ``

Una cuerda es diferente a una runa. En las runas que usamos

single-quotes ''''

Ahora una runa también es un alias para int32 ... ¿Qué?

La razón por la que las runas son un alias para int32 es porque lo vemos con esquemas de codificación como los siguientes

cada personaje se asigna a un número, por lo que es el número que estamos almacenando. Por ejemplo, un mapa a 97 y cuando almacenamos ese número es solo el número y así es que runa es un alias para int32. Pero no es solo cualquier número. Es un número con 32 ''ceros y unos'' o ''4'' bytes. (Nota: UTF-8 es un esquema de codificación de 4 bytes)

¿Cómo se relacionan las runas con las cadenas?

Una cuerda es una colección de runas. En el siguiente código:

package main import ( "fmt" ) func main() { fmt.Println([]byte("Hello")) }

Intentamos convertir una cadena en una secuencia de bytes. El resultado es:

[72 101 108 108 111]

Podemos ver que cada uno de los bytes que componen esa cadena es una runa.


Los literales de runas son solo un valor entero (como usted ha escrito). Están "asignados" a su punto de código Unicode. Por ejemplo, la regla literal ''a'' es en realidad el número 97.

Por lo tanto, su programa es prácticamente equivalente a:

package main import "fmt" func SwapRune(r rune) rune { switch { case 97 <= r && r <= 122: return r - 32 case 65 <= r && r <= 90: return r + 32 default: return r } } func main() { fmt.Println(SwapRune(''a'')) }

lo cual debería ser obvio si observa la asignación de Unicode, que es idéntica a ASCII en ese rango. Y 32 es el desplazamiento de los caracteres en mayúsculas y minúsculas. Entonces, si agrega 32 a ''A'', obtiene ''a'' y viceversa.


No tengo suficiente reputación para publicar un comentario en la respuesta de fabrizioM, así que tendré que publicarlo aquí en su lugar.

La respuesta de Fabrizio es en gran medida correcta, y ciertamente capturó la esencia del problema, aunque hay una distinción que debe hacerse.

Una cadena NO es necesariamente una secuencia de runas. Es un contenedor sobre una "porción de bytes", un sector que es un contenedor sobre una matriz Go. ¿Qué diferencia hace esto?

Una runa es necesariamente un valor de 32 bits, lo que significa que una secuencia de runas necesariamente tendría un cierto número de bits x * 32. Las cadenas, siendo una secuencia de bytes, en cambio tienen una longitud de x * 8 bits. Si todas las cadenas estuvieran realmente en Unicode, esta diferencia no tendría ningún impacto. Sin embargo, como las cadenas son segmentos de bytes, Go puede usar ASCII o cualquier otra codificación de bytes arbitraria.

Los literales de cadena, sin embargo, deben escribirse en la fuente codificada en UTF-8.

Fuente de información: http://blog.golang.org/strings


Todos los demás han cubierto la parte relacionada con las runas, así que no voy a hablar de eso.

Sin embargo, también hay una pregunta relacionada con el switch no tiene ningún argumento. Esto es simplemente porque en Golang, switch sin una expresión es una forma alternativa de expresar la lógica if / else. Por ejemplo, escribiendo esto:

t := time.Now() switch { case t.Hour() < 12: fmt.Println("It''s before noon") default: fmt.Println("It''s after noon") }

es lo mismo que escribir esto:

t := time.Now() if t.Hour() < 12 { fmt.Println("It''s before noon") } else { fmt.Println("It''s after noon") }

Puedes leer más here .