switch pattern datatypes syntax scala

syntax - pattern - ¿Cuáles son algunos ejemplos de casos de uso para literales de símbolos en Scala?



switch case scala (3)

El uso de literales de símbolos no está inmediatamente claro por lo que he leído en Scala. ¿Alguien querría compartir algunos usos del mundo real?

¿Hay algún idioma en particular de Java cubierto por literales de símbolos? ¿Qué idiomas tienen construcciones similares? Vengo de un fondo de Python y no estoy seguro de que haya algo análogo en ese idioma.

¿Qué me motivaría a usar ''HelloWorld vs'' HelloWorld ''?

Gracias


Python mantiene una tabla global interna de "cadenas internas" con los nombres de todas las variables, funciones, módulos, etc. Con esta tabla, el intérprete puede realizar búsquedas y optimizaciones más rápidas. Puede forzar este proceso con la función intern ( sys.intern en python3).

Además, Java y Scala usan automáticamente "cadenas internas" para búsquedas más rápidas. Con scala, puede usar el método de intern para forzar al interno de una cadena, pero este proceso no funciona con todas las cadenas. Los símbolos se benefician de la garantía de ser internados, por lo que una sola verificación de referencia de igualdad es suficiente para demostrar igualdad o desigualdad.


Si tiene cadenas simples que representan nombres de métodos en el código, que tal vez se pasen, no está transmitiendo las cosas de manera apropiada. Esta es una especie de límite de Datos / Códigos, no siempre es fácil dibujar la línea, pero si dijéramos que en ese ejemplo esos nombres de métodos tienen más código que datos, entonces queremos algo que identifique claramente esa .

Un Symbol Literal entra en juego donde diferencia claramente cualquier dato de cadena antiguo con una construcción que se usa en el código. Es realmente allí donde desea indicar, esto no es solo una cadena de datos, pero de hecho de alguna manera parte del código. La idea de que cosas como tu IDE lo resalten de manera diferente, y con las herramientas, podrías refactorizarlas, en lugar de hacer búsqueda / reemplazo de texto.

Este link discute bastante bien.


En términos de Java, los símbolos son cadenas internas. Esto significa, por ejemplo, que la comparación de igualdad de referencia ( eq en Scala y == en Java) da el mismo resultado que la comparación de igualdad normal ( == en Scala y equals en Java): ''abcd eq ''abcd devolverá true, mientras que "abcd" eq "abcd" podría no, dependiendo de los caprichos de JVM (bueno, debería ser para literales, pero no para cadenas creadas dinámicamente en general).

Otros lenguajes que usan símbolos son Lisp (que utiliza ''abcd like Scala), Ruby ( :abcd ), Erlang y Prolog ( abcd ; se llaman átomos en lugar de símbolos).

Usaría un símbolo cuando no me importa la estructura de una cadena y la usaría simplemente como un nombre para algo. Por ejemplo, si tengo una tabla de base de datos que representa CD, que incluye una columna llamada "precio", no me importa que el segundo carácter en "precio" sea "r", o sobre concatenar nombres de columna; por lo que una biblioteca de base de datos en Scala podría razonablemente usar símbolos para nombres de tablas y columnas.