2012-09-28 14 views
7

Tengo un método en Scala que devuelve una tupla, digamos que el método se llama 'prueba'. Entonces lo que quiero hacer¿Cómo se empareja el patrón con una variable en mayúscula?

val (X,Y) = test() 

Sin embargo, el patrón de coincidencia sólo funciona en Scala, cuando los nombres de las variables son minúsculas, es decir:

val(_X,_Y) = test(); val X = _X; val Y = _Y 

... funciona bien, pero es feo, y no breve. Como X e Y son matrices, realmente no quiero tener que usar variables en minúsculas. (En scipy y matlab, no tendría esa restricción, por ejemplo).

Creo que hay alguna manera de asegurarse de que las variables en minúsculas se comporten como mayúsculas, es decir, haciendo `x`. Tal vez hay alguna forma de hacer que las variables en mayúsculas se comporten como minúsculas? Entonces, esa es mi pregunta: ¿hay alguna forma de emparejar patrones directamente en variables mayúsculas en Scala?

Respuesta

6

La respuesta corta es no.

Las convenciones de sintaxis hacen que su código sea legible y comprensible para los demás. La convención de Scala es que las variables comienzan con minúsculas y constantes y las clases comienzan con mayúsculas. Al violar esto, no solo obtienes problemas como problemas de coincidencia de patrones, tu código se vuelve menos legible. (Créame, si alguna vez tiene que leer el código escrito por otra persona a la que no le interesan tales convenciones, estará maldiciendo a esa persona.)

Si desea enfatizar que las variables son matrices, sugiero usted puede usar xMatrix y yMatrix o algo así. Esto dejará en claro que son variables y que representan matrices.

O cree una convención específica para su proyecto que todas las variables de la matriz terminarán con digamos "M", como xM y yM.

Merece la pena escribir algunos caracteres más si hace que su código sea legible.

+4

Creo que hay algo extraño en un lenguaje que le permite usar nombres de mayúsculas variables durante las primeras 20 horas de descubrimiento del lenguaje, y de repente, por un uso pequeño pero útil, decide de repente, no, variables mayúsculas , ¡No permitido! –

+0

@HughPerkins Estoy de acuerdo con eso. Y se vuelve aún más complicado: Scala le permite hacer coincidir patrones en constantes, que se definen como variables con nombres en mayúsculas.Algo como 'val MyConst =" Texto "; match de someString {caso MyConst => ...; ...} '. Esto causa mucha confusión. La regla más sensata es usar mayúsculas para las constantes de nivel superior solamente y usar minúsculas en todos los demás lugares. –

+0

Ok, bueno, nadie ha proporcionado una respuesta positiva a la pregunta, por lo que marcaré su respuesta como la respuesta por el momento, sobre todo porque proporcionó algunas ideas constructivas sobre cómo solucionar la falta de poder especificar el tipo (constante vs variable) de una variable en Scala. –

1

No hay forma de hacer esto y no debería haberlo. Ya tiene el tipo de variable para decirle que es una matriz, por lo que no es necesario convertir los nombres de las variables en mayúsculas.

+0

Eso podría ser cierto para el desarrollo de software de propósito general (no digo que lo sea, pero no voy a argumentar que no lo es) pero me estoy enfocando en el uso del aprendizaje automático, donde X significa ' todos los puntos de datos ', y x significa' un solo punto de datos '. Esta es una notación estándar, por ejemplo, consulte Bishop, "Reconocimiento de patrones y aprendizaje automático", página 141. Claro, uno podría cambiar la forma en que uno hace coincidir el idioma, pero no es el idioma para facilitarnos la vida, el otro no. a su alrededor? scipy y matlab y java y C++ permiten el uso de X como el nombre de una matriz. –

+0

por supuesto, es una notación estándar en matemáticas, al igual que x y xs son notación estándar en scala. Sin embargo, nada de esto cambia el simple hecho de que lo que quiere hacer no funcionará. –

+0

Realmente, yo diría que la variable debe tener un tipo para decirle al compilador/tiempo de ejecución si es una constante o una variable. No estoy seguro de si el uso de mayúsculas/minúsculas para distinguir el tipo es común en el mundo de la FP, pero parece un poco ... inusual ... para mí en el mundo oo. –

Cuestiones relacionadas