Hace un tiempo I showed cómo crear una DSL con operadores para manipular los nodos y las propiedades de un árbol JCR. Si se presenta correctamente, el código se asemeja a un dibujo de arte ASCII del árbol de contenido real.El siguiente código Scala
root ¦- "movies" -+ { n: Node =>
n ¦= ("title", "Night on Earth")
n ¦= ("length", 123L)
n ¦= ("ratings", 9L::8L::5L::Nil)
n ¦= ("languages", "en"::"it"::"fi"::"fr"::Nil)
n ¦- "cast" -+ { n: Node =>
n ¦= ("Gena Rowlands", "Victoria Snelling")
n ¦= ("Winona Ryder", "Corky")
n ¦= ("Roberto Benigni", "Taxi Driver") }}
es equivalente a esta versión en Java:
Node movies = root.addNode("movies");
movies.setProperty("title", "Night on Earth");
movies.setProperty("length", 123L);
movies.setProperty("ratings", new String[]{"9", "8", "5"}, PropertyType.LONG);
movies.setProperty("languages", new String[]{"en", "it", "fi", "fr"}, PropertyType.STRING);
Node cast = movies.addNode("cast");
cast.setProperty("Gena Rowlands", "Victoria Snelling");
cast.setProperty("Winona Ryder", "Corky");
cast.setProperty("Roberto Benigni", "Taxi Driver");
Aunque no es necesariamente útil, podría merecer un punto de creatividad.
Demasiada creatividad suele ser algo malo, ya que infringe las expectativas. La sobrecarga del operador es más poderosa cuando se usa como todos esperarían: sí, por supuesto '*' multiplica los números complejos tanto como los dobles. Por ejemplo, nombrar su variable de retorno 'frodo' y una variable de intercambio temporal' sam' es creativa en cierto sentido, pero es bastante incomprensible (especialmente para personas que no están familiarizadas con El señor de los anillos). Nombrar su variable de retorno '<---' y su variable swap '<-->' probablemente no sea mucho mejor. –
Para los nuevos en Scala, tenga en cuenta que la "sintaxis de operador" de Scala es simplemente una buena forma de llamar a los métodos ordinarios de Scala. Entonces 'x + y' es lo mismo que' x. + (Y) '. En ambos casos, '+' es un método ordinario en el objeto 'x', que podría ser de tipo' Int', 'Double', etc. La sintaxis del operador no necesita un método simbólico (por ejemplo,' list1 zip list2 'funciona), pero el uso de un método simbólico permite a Scala aplicar reglas de prioridad incorporadas. –
Lo sentimos, pero SO aún no acepta "enumerar todas sus preguntas X favoritas para Y". A menos que su problema actual sea * Necesito enumerar todos los operadores * o algo así, esto está fuera del alcance de acuerdo con [faq]. –